CVE-2026-80656: hfsplus: Add a sanity check for btree node size
In the Linux kernel, the following vulnerability has been resolved:
hfsplus: Add a sanity check for btree node size
Syzbot reported an uninit-value bug in [1] with a corrupted HFS+ image, during the file system mounting process, specifically while loading the catalog, a corrupted nodesize value of 1 caused the recoff argument passed to hfsbnodereadu16() (within hfsbnodefind()) to be excessively large. Consequently, the function failed to return a valid value to initialize the off variable, triggering the bug [1].
Every node starts from BTree node descriptor: struct hfsbnodedesc. So, the size of node cannot be lesser than that. However, technical specification declares that: "The node size (which is expressed in bytes) must be power of two, from 512 through 32,768, inclusive." Add a check for btree node size base on technical specification.
[1] BUG: KMSAN: uninit-value in hfsplusbnodefind+0x141c/0x1600 fs/hfsplus/bnode.c:584 hfsplusbnodefind+0x141c/0x1600 fs/hfsplus/bnode.c:584 hfsplusbtreeopen+0x169a/0x1e40 fs/hfsplus/btree.c:382 hfsplusfillsuper+0x111f/0x2770 fs/hfsplus/super.c:553 gettreebdevflags+0x6e6/0x920 fs/super.c:1694 gettreebdev+0x38/0x50 fs/super.c:1717 hfsplusgettree+0x35/0x40 fs/hfsplus/super.c:709 vfsgettree+0xb3/0x5d0 fs/super.c:1754 fcmount fs/namespace.c:1193 [inline]
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Linux kernel (hfsplus)to a version that resolves this vulnerability.Patch hfsplus: Add a sanity check for btree node size - Configuration
Apply the kernel fix for HFS+ that adds a sanity check for btree node size (as per technical specification: power of two, 512..32768 inclusive) and initializes/guards the rec_off/offset path so mounting corrupted images (e.g., node_size=1) does not trigger the uninit-value bug.
HFS+ filesystem (fs/hfsplus/bnode.c within hfsplus_bnode_find()) btree node size sanity check = Require node_size to be a power of two between 512 and 32768 (inclusive) and ensure rec_off/offset is initialized before use
Event History
Frequently Asked Questions
What must an attacker provide to trigger the issue?
An attacker needs to provide a corrupted HFS+ filesystem image with an invalid B-tree node_size value, such as 1, and have the system attempt to mount it. The flaw is reached while loading the HFS+ catalog during mounting.
Which HFS+ images are rejected by the fix?
The fix enforces the HFS+ specification requirement that B-tree node sizes be powers of two from 512 through 32,768 bytes, inclusive. Node sizes smaller than the B-tree node descriptor are also invalid.
How can I tell whether a system encountered this issue?
Affected execution may produce a KMSAN uninitialized-value report in hfsplus_bnode_find, with call paths through hfsplus_btree_open and hfsplus_fill_super during a mount attempt. The triggering filesystem image has a corrupted HFS+ B-tree node_size field.