CVE-2025-40349 (GCVE-0-2025-40349)

Vulnerability from cvelistv5 – Published: 2025-12-16 13:30 – Updated: 2026-08-05 12:09
VLAI
Title
hfs: validate record offset in hfsplus_bmap_alloc
Summary
In the Linux kernel, the following vulnerability has been resolved: hfs: validate record offset in hfsplus_bmap_alloc hfsplus_bmap_alloc can trigger a crash if a record offset or length is larger than node_size [ 15.264282] BUG: KASAN: slab-out-of-bounds in hfsplus_bmap_alloc+0x887/0x8b0 [ 15.265192] Read of size 8 at addr ffff8881085ca188 by task test/183 [ 15.265949] [ 15.266163] CPU: 0 UID: 0 PID: 183 Comm: test Not tainted 6.17.0-rc2-gc17b750b3ad9 #14 PREEMPT(voluntary) [ 15.266165] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 [ 15.266167] Call Trace: [ 15.266168] <TASK> [ 15.266169] dump_stack_lvl+0x53/0x70 [ 15.266173] print_report+0xd0/0x660 [ 15.266181] kasan_report+0xce/0x100 [ 15.266185] hfsplus_bmap_alloc+0x887/0x8b0 [ 15.266208] hfs_btree_inc_height.isra.0+0xd5/0x7c0 [ 15.266217] hfsplus_brec_insert+0x870/0xb00 [ 15.266222] __hfsplus_ext_write_extent+0x428/0x570 [ 15.266225] __hfsplus_ext_cache_extent+0x5e/0x910 [ 15.266227] hfsplus_ext_read_extent+0x1b2/0x200 [ 15.266233] hfsplus_file_extend+0x5a7/0x1000 [ 15.266237] hfsplus_get_block+0x12b/0x8c0 [ 15.266238] __block_write_begin_int+0x36b/0x12c0 [ 15.266251] block_write_begin+0x77/0x110 [ 15.266252] cont_write_begin+0x428/0x720 [ 15.266259] hfsplus_write_begin+0x51/0x100 [ 15.266262] cont_write_begin+0x272/0x720 [ 15.266270] hfsplus_write_begin+0x51/0x100 [ 15.266274] generic_perform_write+0x321/0x750 [ 15.266285] generic_file_write_iter+0xc3/0x310 [ 15.266289] __kernel_write_iter+0x2fd/0x800 [ 15.266296] dump_user_range+0x2ea/0x910 [ 15.266301] elf_core_dump+0x2a94/0x2ed0 [ 15.266320] vfs_coredump+0x1d85/0x45e0 [ 15.266349] get_signal+0x12e3/0x1990 [ 15.266357] arch_do_signal_or_restart+0x89/0x580 [ 15.266362] irqentry_exit_to_user_mode+0xab/0x110 [ 15.266364] asm_exc_page_fault+0x26/0x30 [ 15.266366] RIP: 0033:0x41bd35 [ 15.266367] Code: bc d1 f3 0f 7f 27 f3 0f 7f 6f 10 f3 0f 7f 77 20 f3 0f 7f 7f 30 49 83 c0 0f 49 29 d0 48 8d 7c 17 31 e9 9f 0b 00 00 66 0f ef c0 <f3> 0f 6f 0e f3 0f 6f 56 10 66 0f 74 c1 66 0f d7 d0 49 83 f8f [ 15.266369] RSP: 002b:00007ffc9e62d078 EFLAGS: 00010283 [ 15.266371] RAX: 00007ffc9e62d100 RBX: 0000000000000000 RCX: 0000000000000000 [ 15.266372] RDX: 00000000000000e0 RSI: 0000000000000000 RDI: 00007ffc9e62d100 [ 15.266373] RBP: 0000400000000040 R08: 00000000000000e0 R09: 0000000000000000 [ 15.266374] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 [ 15.266375] R13: 0000000000000000 R14: 0000000000000000 R15: 0000400000000000 [ 15.266376] </TASK> When calling hfsplus_bmap_alloc to allocate a free node, this function first retrieves the bitmap from header node and map node using node->page together with the offset and length from hfs_brec_lenoff ``` len = hfs_brec_lenoff(node, 2, &off16); off = off16; off += node->page_offset; pagep = node->page + (off >> PAGE_SHIFT); data = kmap_local_page(*pagep); ``` However, if the retrieved offset or length is invalid(i.e. exceeds node_size), the code may end up accessing pages outside the allocated range for this node. This patch adds proper validation of both offset and length before use, preventing out-of-bounds page access. Move is_bnode_offset_valid and check_and_correct_requested_length to hfsplus_fs.h, as they may be required by other functions.
Impacted products
Vendor Product Version
Linux Linux Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < f7d9f600c7c3ff5dab36181a388af55f2c95604c (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 40dfe7a4215a1f20842561ffaf5a6f83a987e75b (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 418e48cab99c52c1760636a4dbe464bf6db2018b (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 0058d20d76182861dbdd8fd6e2dd8d18d6d3becf (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 4f40a2b3969daf10dca4dea6f6dd0e813f79b227 (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 17ed51cfce6c62cffb97059ef392ad2e0245806e (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 068a46df3e6acc68fb9db0a6313ab379a11ecd6f (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 738d5a51864ed8d7a68600b8c0c63fe6fe5c4f20 (git)
Create a notification for this product.
Linux Linux Affected: 2.6.12
Unaffected: 0 , < 2.6.12 (semver)
Unaffected: 5.4.301 , ≤ 5.4.* (semver)
Unaffected: 5.10.246 , ≤ 5.10.* (semver)
Unaffected: 5.15.196 , ≤ 5.15.* (semver)
Unaffected: 6.1.158 , ≤ 6.1.* (semver)
Unaffected: 6.6.115 , ≤ 6.6.* (semver)
Unaffected: 6.12.56 , ≤ 6.12.* (semver)
Unaffected: 6.17.6 , ≤ 6.17.* (semver)
Unaffected: 6.18 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/hfsplus/bnode.c",
            "fs/hfsplus/btree.c",
            "fs/hfsplus/hfsplus_fs.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "f7d9f600c7c3ff5dab36181a388af55f2c95604c",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "40dfe7a4215a1f20842561ffaf5a6f83a987e75b",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "418e48cab99c52c1760636a4dbe464bf6db2018b",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "0058d20d76182861dbdd8fd6e2dd8d18d6d3becf",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "4f40a2b3969daf10dca4dea6f6dd0e813f79b227",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "17ed51cfce6c62cffb97059ef392ad2e0245806e",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "068a46df3e6acc68fb9db0a6313ab379a11ecd6f",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "738d5a51864ed8d7a68600b8c0c63fe6fe5c4f20",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/hfsplus/bnode.c",
            "fs/hfsplus/btree.c",
            "fs/hfsplus/hfsplus_fs.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "2.6.12"
            },
            {
              "lessThan": "2.6.12",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.4.*",
              "status": "unaffected",
              "version": "5.4.301",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.246",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.196",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.158",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.115",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.56",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.17.*",
              "status": "unaffected",
              "version": "6.17.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.18",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.4.301",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.246",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.196",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.158",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.115",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.56",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.17.6",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nhfs: validate record offset in hfsplus_bmap_alloc\n\nhfsplus_bmap_alloc can trigger a crash if a\nrecord offset or length is larger than node_size\n\n[   15.264282] BUG: KASAN: slab-out-of-bounds in hfsplus_bmap_alloc+0x887/0x8b0\n[   15.265192] Read of size 8 at addr ffff8881085ca188 by task test/183\n[   15.265949]\n[   15.266163] CPU: 0 UID: 0 PID: 183 Comm: test Not tainted 6.17.0-rc2-gc17b750b3ad9 #14 PREEMPT(voluntary)\n[   15.266165] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\n[   15.266167] Call Trace:\n[   15.266168]  \u003cTASK\u003e\n[   15.266169]  dump_stack_lvl+0x53/0x70\n[   15.266173]  print_report+0xd0/0x660\n[   15.266181]  kasan_report+0xce/0x100\n[   15.266185]  hfsplus_bmap_alloc+0x887/0x8b0\n[   15.266208]  hfs_btree_inc_height.isra.0+0xd5/0x7c0\n[   15.266217]  hfsplus_brec_insert+0x870/0xb00\n[   15.266222]  __hfsplus_ext_write_extent+0x428/0x570\n[   15.266225]  __hfsplus_ext_cache_extent+0x5e/0x910\n[   15.266227]  hfsplus_ext_read_extent+0x1b2/0x200\n[   15.266233]  hfsplus_file_extend+0x5a7/0x1000\n[   15.266237]  hfsplus_get_block+0x12b/0x8c0\n[   15.266238]  __block_write_begin_int+0x36b/0x12c0\n[   15.266251]  block_write_begin+0x77/0x110\n[   15.266252]  cont_write_begin+0x428/0x720\n[   15.266259]  hfsplus_write_begin+0x51/0x100\n[   15.266262]  cont_write_begin+0x272/0x720\n[   15.266270]  hfsplus_write_begin+0x51/0x100\n[   15.266274]  generic_perform_write+0x321/0x750\n[   15.266285]  generic_file_write_iter+0xc3/0x310\n[   15.266289]  __kernel_write_iter+0x2fd/0x800\n[   15.266296]  dump_user_range+0x2ea/0x910\n[   15.266301]  elf_core_dump+0x2a94/0x2ed0\n[   15.266320]  vfs_coredump+0x1d85/0x45e0\n[   15.266349]  get_signal+0x12e3/0x1990\n[   15.266357]  arch_do_signal_or_restart+0x89/0x580\n[   15.266362]  irqentry_exit_to_user_mode+0xab/0x110\n[   15.266364]  asm_exc_page_fault+0x26/0x30\n[   15.266366] RIP: 0033:0x41bd35\n[   15.266367] Code: bc d1 f3 0f 7f 27 f3 0f 7f 6f 10 f3 0f 7f 77 20 f3 0f 7f 7f 30 49 83 c0 0f 49 29 d0 48 8d 7c 17 31 e9 9f 0b 00 00 66 0f ef c0 \u003cf3\u003e 0f 6f 0e f3 0f 6f 56 10 66 0f 74 c1 66 0f d7 d0 49 83 f8f\n[   15.266369] RSP: 002b:00007ffc9e62d078 EFLAGS: 00010283\n[   15.266371] RAX: 00007ffc9e62d100 RBX: 0000000000000000 RCX: 0000000000000000\n[   15.266372] RDX: 00000000000000e0 RSI: 0000000000000000 RDI: 00007ffc9e62d100\n[   15.266373] RBP: 0000400000000040 R08: 00000000000000e0 R09: 0000000000000000\n[   15.266374] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000\n[   15.266375] R13: 0000000000000000 R14: 0000000000000000 R15: 0000400000000000\n[   15.266376]  \u003c/TASK\u003e\n\nWhen calling hfsplus_bmap_alloc to allocate a free node, this function\nfirst retrieves the bitmap from header node and map node using node-\u003epage\ntogether with the offset and length from hfs_brec_lenoff\n\n```\nlen = hfs_brec_lenoff(node, 2, \u0026off16);\noff = off16;\n\noff += node-\u003epage_offset;\npagep = node-\u003epage + (off \u003e\u003e PAGE_SHIFT);\ndata = kmap_local_page(*pagep);\n```\n\nHowever, if the retrieved offset or length is invalid(i.e. exceeds\nnode_size), the code may end up accessing pages outside the allocated\nrange for this node.\n\nThis patch adds proper validation of both offset and length before use,\npreventing out-of-bounds page access. Move is_bnode_offset_valid and\ncheck_and_correct_requested_length to hfsplus_fs.h, as they may be\nrequired by other functions."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerability is reached by mounting a crafted HFS+ volume and then performing an ordinary local file operation (write/create) on it; there is no network-facing component. Local mounting of attacker-supplied images is available via udisks2/loop-setup for active local sessions, fstab `user` entries, and desktop/kiosk automount.\nAC:L - The out-of-bounds offset and length are read verbatim from attacker-authored on-disk metadata, so the OOB access is fully deterministic \u2014 no race, timing, or uncontrolled memory-layout condition is involved.\nPR:L - After the crafted volume is mounted, an unprivileged local user with write access to it reaches hfs_bmap_alloc through a plain write() that extends a file \u2014 no capability check exists anywhere on the hfsplus_file_extend \u2192 hfsplus_brec_insert \u2192 hfs_btree_inc_height path.\nUI:N - In the removable-media/automount and udisks2 scenarios the volume is mounted without any deliberate victim action, and the trigger itself is a normal file write performed by the attacker.\nS:U - The corruption is confined to kernel memory within the same security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The code performs a slab out-of-bounds read of an 8-byte value past node-\u003epage[], then dereferences that value as a struct page and reads bytes through the resulting mapping, yielding attacker-influenced disclosure of arbitrary kernel memory.\nI:H - The loop performs `data[off] |= m` and set_page_dirty() through the bogus, heap-groomable page pointer, giving an out-of-bounds bit-set write into kernel memory that is exploitable for control-flow hijacking or privilege escalation.\nA:H - Dereferencing a garbage struct page pointer and writing through it reliably produces a KASAN report, oops, or kernel panic, crashing the system."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:09:49.208Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/f7d9f600c7c3ff5dab36181a388af55f2c95604c"
        },
        {
          "url": "https://git.kernel.org/stable/c/40dfe7a4215a1f20842561ffaf5a6f83a987e75b"
        },
        {
          "url": "https://git.kernel.org/stable/c/418e48cab99c52c1760636a4dbe464bf6db2018b"
        },
        {
          "url": "https://git.kernel.org/stable/c/0058d20d76182861dbdd8fd6e2dd8d18d6d3becf"
        },
        {
          "url": "https://git.kernel.org/stable/c/4f40a2b3969daf10dca4dea6f6dd0e813f79b227"
        },
        {
          "url": "https://git.kernel.org/stable/c/17ed51cfce6c62cffb97059ef392ad2e0245806e"
        },
        {
          "url": "https://git.kernel.org/stable/c/068a46df3e6acc68fb9db0a6313ab379a11ecd6f"
        },
        {
          "url": "https://git.kernel.org/stable/c/738d5a51864ed8d7a68600b8c0c63fe6fe5c4f20"
        }
      ],
      "title": "hfs: validate record offset in hfsplus_bmap_alloc",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-40349",
    "datePublished": "2025-12-16T13:30:23.092Z",
    "dateReserved": "2025-04-16T07:20:57.187Z",
    "dateUpdated": "2026-08-05T12:09:49.208Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-40349",
      "date": "2026-10-14",
      "epss": "0.00155",
      "percentile": "0.04159"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "fs/hfsplus/bnode.c",
                  "fs/hfsplus/btree.c",
                  "fs/hfsplus/hfsplus_fs.h"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "f7d9f600c7c3ff5dab36181a388af55f2c95604c",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "40dfe7a4215a1f20842561ffaf5a6f83a987e75b",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "418e48cab99c52c1760636a4dbe464bf6db2018b",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "0058d20d76182861dbdd8fd6e2dd8d18d6d3becf",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "4f40a2b3969daf10dca4dea6f6dd0e813f79b227",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "17ed51cfce6c62cffb97059ef392ad2e0245806e",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "068a46df3e6acc68fb9db0a6313ab379a11ecd6f",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "738d5a51864ed8d7a68600b8c0c63fe6fe5c4f20",
                    "status": "affected",
                    "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "fs/hfsplus/bnode.c",
                  "fs/hfsplus/btree.c",
                  "fs/hfsplus/hfsplus_fs.h"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "2.6.12"
                  },
                  {
                    "lessThan": "2.6.12",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.4.*",
                    "status": "unaffected",
                    "version": "5.4.301",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.10.*",
                    "status": "unaffected",
                    "version": "5.10.246",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.15.*",
                    "status": "unaffected",
                    "version": "5.15.196",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.158",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.115",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.56",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.17.*",
                    "status": "unaffected",
                    "version": "6.17.6",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "6.18",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nhfs: validate record offset in hfsplus_bmap_alloc\n\nhfsplus_bmap_alloc can trigger a crash if a\nrecord offset or length is larger than node_size\n\n[   15.264282] BUG: KASAN: slab-out-of-bounds in hfsplus_bmap_alloc+0x887/0x8b0\n[   15.265192] Read of size 8 at addr ffff8881085ca188 by task test/183\n[   15.265949]\n[   15.266163] CPU: 0 UID: 0 PID: 183 Comm: test Not tainted 6.17.0-rc2-gc17b750b3ad9 #14 PREEMPT(voluntary)\n[   15.266165] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\n[   15.266167] Call Trace:\n[   15.266168]  \u003cTASK\u003e\n[   15.266169]  dump_stack_lvl+0x53/0x70\n[   15.266173]  print_report+0xd0/0x660\n[   15.266181]  kasan_report+0xce/0x100\n[   15.266185]  hfsplus_bmap_alloc+0x887/0x8b0\n[   15.266208]  hfs_btree_inc_height.isra.0+0xd5/0x7c0\n[   15.266217]  hfsplus_brec_insert+0x870/0xb00\n[   15.266222]  __hfsplus_ext_write_extent+0x428/0x570\n[   15.266225]  __hfsplus_ext_cache_extent+0x5e/0x910\n[   15.266227]  hfsplus_ext_read_extent+0x1b2/0x200\n[   15.266233]  hfsplus_file_extend+0x5a7/0x1000\n[   15.266237]  hfsplus_get_block+0x12b/0x8c0\n[   15.266238]  __block_write_begin_int+0x36b/0x12c0\n[   15.266251]  block_write_begin+0x77/0x110\n[   15.266252]  cont_write_begin+0x428/0x720\n[   15.266259]  hfsplus_write_begin+0x51/0x100\n[   15.266262]  cont_write_begin+0x272/0x720\n[   15.266270]  hfsplus_write_begin+0x51/0x100\n[   15.266274]  generic_perform_write+0x321/0x750\n[   15.266285]  generic_file_write_iter+0xc3/0x310\n[   15.266289]  __kernel_write_iter+0x2fd/0x800\n[   15.266296]  dump_user_range+0x2ea/0x910\n[   15.266301]  elf_core_dump+0x2a94/0x2ed0\n[   15.266320]  vfs_coredump+0x1d85/0x45e0\n[   15.266349]  get_signal+0x12e3/0x1990\n[   15.266357]  arch_do_signal_or_restart+0x89/0x580\n[   15.266362]  irqentry_exit_to_user_mode+0xab/0x110\n[   15.266364]  asm_exc_page_fault+0x26/0x30\n[   15.266366] RIP: 0033:0x41bd35\n[   15.266367] Code: bc d1 f3 0f 7f 27 f3 0f 7f 6f 10 f3 0f 7f 77 20 f3 0f 7f 7f 30 49 83 c0 0f 49 29 d0 48 8d 7c 17 31 e9 9f 0b 00 00 66 0f ef c0 \u003cf3\u003e 0f 6f 0e f3 0f 6f 56 10 66 0f 74 c1 66 0f d7 d0 49 83 f8f\n[   15.266369] RSP: 002b:00007ffc9e62d078 EFLAGS: 00010283\n[   15.266371] RAX: 00007ffc9e62d100 RBX: 0000000000000000 RCX: 0000000000000000\n[   15.266372] RDX: 00000000000000e0 RSI: 0000000000000000 RDI: 00007ffc9e62d100\n[   15.266373] RBP: 0000400000000040 R08: 00000000000000e0 R09: 0000000000000000\n[   15.266374] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000\n[   15.266375] R13: 0000000000000000 R14: 0000000000000000 R15: 0000400000000000\n[   15.266376]  \u003c/TASK\u003e\n\nWhen calling hfsplus_bmap_alloc to allocate a free node, this function\nfirst retrieves the bitmap from header node and map node using node-\u003epage\ntogether with the offset and length from hfs_brec_lenoff\n\n```\nlen = hfs_brec_lenoff(node, 2, \u0026off16);\noff = off16;\n\noff += node-\u003epage_offset;\npagep = node-\u003epage + (off \u003e\u003e PAGE_SHIFT);\ndata = kmap_local_page(*pagep);\n```\n\nHowever, if the retrieved offset or length is invalid(i.e. exceeds\nnode_size), the code may end up accessing pages outside the allocated\nrange for this node.\n\nThis patch adds proper validation of both offset and length before use,\npreventing out-of-bounds page access. Move is_bnode_offset_valid and\ncheck_and_correct_requested_length to hfsplus_fs.h, as they may be\nrequired by other functions."
          },
          {
            "lang": "es",
            "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nhfs: validar el desplazamiento de registro en hfsplus_bmap_alloc\n\nhfsplus_bmap_alloc puede provocar un fallo si un\ndesplazamiento de registro o una longitud es mayor que node_size\n\n[   15.264282] ERROR: KASAN: slab-out-of-bounds en hfsplus_bmap_alloc+0x887/0x8b0\n[   15.265192] Lectura de tama\u00f1o 8 en la direcci\u00f3n ffff8881085ca188 por la tarea test/183\n[   15.265949]\n[   15.266163] CPU: 0 UID: 0 PID: 183 Comm: test No contaminado 6.17.0-rc2-gc17b750b3ad9 #14 PREEMPT(voluntario)\n[   15.266165] Nombre del hardware: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\n[   15.266167] Traza de Llamada:\n[   15.266168]  \u003cTAREA\u003e\n[   15.266169]  dump_stack_lvl+0x53/0x70\n[   15.266173]  print_report+0xd0/0x660\n[   15.266181]  kasan_report+0xce/0x100\n[   15.266185]  hfsplus_bmap_alloc+0x887/0x8b0\n[   15.266208]  hfs_btree_inc_height.isra.0+0xd5/0x7c0\n[   15.266217]  hfsplus_brec_insert+0x870/0xb00\n[   15.266222]  __hfsplus_ext_write_extent+0x428/0x570\n[   15.266225]  __hfsplus_ext_cache_extent+0x5e/0x910\n[   15.266227]  hfsplus_ext_read_extent+0x1b2/0x200\n[   15.266233]  hfsplus_file_extend+0x5a7/0x1000\n[   15.266237]  hfsplus_get_block+0x12b/0x8c0\n[   15.266238]  __block_write_begin_int+0x36b/0x12c0\n[   15.266251]  block_write_begin+0x77/0x110\n[   15.266252]  cont_write_begin+0x428/0x720\n[   15.266259]  hfsplus_write_begin+0x51/0x100\n[   15.266262]  cont_write_begin+0x272/0x720\n[   15.266270]  hfsplus_write_begin+0x51/0x100\n[   15.266274]  generic_perform_write+0x321/0x750\n[   15.266285]  generic_file_write_iter+0xc3/0x310\n[   15.266289]  __kernel_write_iter+0x2fd/0x800\n[   15.266296]  dump_user_range+0x2ea/0x910\n[   15.266301]  elf_core_dump+0x2a94/0x2ed0\n[   15.266320]  vfs_coredump+0x1d85/0x45e0\n[   15.266349]  get_signal+0x12e3/0x1990\n[   15.266357]  arch_do_signal_or_restart+0x89/0x580\n[   15.266362]  irqentry_exit_to_user_mode+0xab/0x110\n[   15.266364]  asm_exc_page_fault+0x26/0x30\n[   15.266366] RIP: 0033:0x41bd35\n[   15.266367] C\u00f3digo: bc d1 f3 0f 7f 27 f3 0f 7f 6f 10 f3 0f 7f 77 20 f3 0f 7f 7f 30 49 83 c0 0f 49 29 d0 48 8d 7c 17 31 e9 9f 0b 00 00 66 0f ef c0 \u003cf3\u003e 0f 6f 0e f3 0f 6f 56 10 66 0f 74 c1 66 0f d7 d0 49 83 f8f\n[   15.266369] RSP: 002b:00007ffc9e62d078 EFLAGS: 00010283\n[   15.266371] RAX: 00007ffc9e62d100 RBX: 0000000000000000 RCX: 0000000000000000\n[   15.266372] RDX: 00000000000000e0 RSI: 0000000000000000 RDI: 00007ffc9e62d100\n[   15.266373] RBP: 0000400000000040 R08: 00000000000000e0 R09: 0000000000000000\n[   15.266374] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000\n[   15.266375] R13: 0000000000000000 R14: 0000000000000000 R15: 0000400000000000\n[   15.266376]  \u003c/TAREA\u003e\n\nAl llamar a hfsplus_bmap_alloc para asignar un nodo libre, esta funci\u00f3n primero recupera el mapa de bits del nodo de cabecera y del nodo de mapa utilizando node -\u003e page junto con el desplazamiento y la longitud de hfs_brec_lenoff\n\n\u0027\u0027\u0027\nlen = hfs_brec_lenoff(node, 2, \u0026off16);\noff = off16;\n\noff += node -\u003e page_offset;\npagep = node -\u003e page + (off \u003e\u003e PAGE_SHIFT);\ndata = kmap_local_page(pagep);\n\u0027\u0027\u0027\n\nSin embargo, si el desplazamiento o la longitud recuperados son inv\u00e1lidos (es decir, excede node_size), el c\u00f3digo puede terminar accediendo a p\u00e1ginas fuera del rango asignado para este nodo.\n\nEste parche a\u00f1ade una validaci\u00f3n adecuada tanto del desplazamiento como de la longitud antes de su uso, evitando el acceso a p\u00e1ginas fuera de los l\u00edmites. Mover is_bnode_offset_valid y check_and_correct_requested_length a hfsplus_fs.h, ya que pueden ser requeridas por otras funciones."
          }
        ],
        "id": "CVE-2025-40349",
        "lastModified": "2026-10-14T13:10:00.187",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2025-12-16T14:15:46.690",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/0058d20d76182861dbdd8fd6e2dd8d18d6d3becf"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/068a46df3e6acc68fb9db0a6313ab379a11ecd6f"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/17ed51cfce6c62cffb97059ef392ad2e0245806e"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/40dfe7a4215a1f20842561ffaf5a6f83a987e75b"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/418e48cab99c52c1760636a4dbe464bf6db2018b"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/4f40a2b3969daf10dca4dea6f6dd0e813f79b227"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/738d5a51864ed8d7a68600b8c0c63fe6fe5c4f20"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/f7d9f600c7c3ff5dab36181a388af55f2c95604c"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Deferred"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-07-30T08:43:11+00:00",
      "cve": "CVE-2025-40349",
      "id": "CVE-2025-40349",
      "initial_release_date": "2025-12-16T00:00:00+00:00",
      "product_status:known_affected": "14",
      "product_status:known_not_affected": "260",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: hfs: validate record offset in hfsplus_bmap_alloc",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-40349.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-10-10T16:31:35Z",
      "cve": "CVE-2025-40349",
      "id": "CVE-2025-40349",
      "initial_release_date": "2025-12-17T00:30:35Z",
      "product_status:known_affected": "394",
      "product_status:known_not_affected": "392",
      "product_status:recommended": "249",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2025-40349",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2025-40349.json",
      "version": "39"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…