HIGH Introduced in 2.6.37
btrfs InodeRef OOB
CVE-2026-93813
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI6.7MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: btrfs: tree-checker: validate INODE_REF's namelen [BUG] A crafted btrfs image can trigger the following crash: BUG: unable to handle page fault for address: ffffd1dc42884000 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page CPU: 9 UID: 0 PID: 1034 Comm: poc Not tainted 7.1.0-rc4-custom+ #383 PREEMPT(full) 46af0a92938a63be7132e0dfd71e62327c51d5c2 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS unknown 02/02/2022 RIP: 0010:memcpy+0xc/0x10 Call Trace: <TASK> read_extent_buffer+0xe4/0x100 [btrfs 3cf0785dd58fec8c5ff84633b772f17ce1f92a8f] btrfs_get_name+0x15e/0x1e0 [btrfs 3cf0785dd58fec8c5ff84633b772f17ce1f92a8f] reconnect_path+0x165/0x390 exportfs_decode_fh_raw+0x337/0x400 ? drop_caches_sysctl_handler+0xb0/0xb0 </TASK> ---[ end trace 0000000000000000 ]--- RIP: 0010:memcpy+0xc/0x10 Kernel panic - not syncing: Fatal exception [CAUSE] TThe crafted image has the following corrupted INODE_REF item: item 9 key (258 INODE_REF 257) itemoff 11544 itemsize 4106 index 2 namelen 4096 name: d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 The itemsize matches the namelen, but the namelen is 4096, way larger than normal name length limit (BTRFS_NAME_LEN, 255). Meanwhile the memory of the @name is only 255 byte sized, this will cause out-of-boundary access, and cause the above crash. [FIX] Add extra namelen verification for INODE_REF, just like what we have done in ROOT_REF checks. Now the crafted image can be rejected gracefully: BTRFS critical (device dm-2): corrupt leaf: root=5 block=30572544 slot=14 ino=259, invalid inode ref name length, has 4096 expect [1, 255] BTRFS error (device dm-2): read time tree block corruption detected on logical 30572544 mirror 2 [ Rebase, add a Link: tag, add an simple cause analyze ]
02KernelScan AI Analysis
Risk summary
A crafted btrfs filesystem image with a corrupted INODE_REF name length can trigger an out-of-bounds write in kernel memory when the image is mounted and its metadata is read. The vulnerability requires root privileges (CAP_SYS_ADMIN) to mount the crafted image, as btrfs is not mountable from unprivileged user namespaces. Impact includes kernel panic and potential memory corruption leading to code execution.
Vulnerability analysis
The btrfs tree-checker validates filesystem metadata items when reading a btrfs image, but it did not verify the name length field inside INODE_REF items against the maximum allowed name length of 255 bytes. A crafted image can set this field to a much larger value (e.g., 4096) that still fits within the item's on-disk size, so the existing item-boundary check passes. When the kernel later copies the name into a fixed 255-byte buffer, it writes far past the end, causing an out-of-bounds write that crashes the kernel or corrupts memory. The fix adds an explicit bounds check that rejects any INODE_REF whose name length is zero or exceeds the 255-byte limit, so the corrupted image is rejected gracefully at read time. Triggering this requires mounting a crafted btrfs filesystem image, which needs CAP_SYS_ADMIN in the init namespace — btrfs is not mountable from user namespaces, so unprivileged users cannot reach this path.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.15 | 2.6.37 | 5.15.222 | 60078a3e25c0 |
| 6.1 | 2.6.37 | 6.1.189 | 509d6a4d889e |
| 6.6 | 2.6.37 | 6.6.158 | 4cb41f07685f |
| 6.12 | 2.6.37 | 6.12.111 | eeddee090b83 |
| 6.18 | 2.6.37 | 6.18.53 | 8f75c1989226 |
| mainline | 2.6.37 | 7.2 | 3dc22abc21f5 |
| cip/6.12 | 2.6.37 | 6.12.111-cip32 | eeddee090b83 |