{"id":15996,"date":"2026-09-04T19:04:39","date_gmt":"2026-09-04T11:04:39","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-46299"},"modified":"2026-09-04T19:04:39","modified_gmt":"2026-09-04T11:04:39","slug":"cve-2026-46299","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-46299","title":{"rendered":"CVE-2026-46299 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nhfsplus: fix held loc"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>hfsplus: fix held lock freed on hfsplus_fill_super()<\/p>\n<p>hfsplus_fill_super() calls hfs_find_init() to initialize a search<br \/>\nstructure, which acquires tree-&gt;tree_lock. If the subsequent call to<br \/>\nhfsplus_cat_build_key() fails, the function jumps to the out_put_root<br \/>\nerror label without releasing the lock. The later cleanup path then<br \/>\nfrees the tree data structure with the lock still held, triggering a<br \/>\nheld lock freed warning.<\/p>\n<p>Fix this by adding the missing hfs_find_exit(&amp;fd) call before jumping<br \/>\nto the out_put_root error label. This ensures that tree-&gt;tree_lock is<br \/>\nproperly released on the error path.<\/p>\n<p>The bug was originally detected on v6.13-rc1 using an experimental<br \/>\nstatic analysis tool we are developing, and we have verified that the<br \/>\nissue persists in the latest mainline kernel. The tool is specifically<br \/>\ndesigned to detect memory management issues. It is currently under active<br \/>\ndevelopment and not yet publicly available.<\/p>\n<p>We confirmed the bug by runtime testing under QEMU with x86_64 defconfig,<br \/>\nlockdep enabled, and CONFIG_HFSPLUS_FS=y. To trigger the error path, we<br \/>\nused GDB to dynamically shrink the max_unistr_len parameter to 1 before<br \/>\nhfsplus_asc2uni() is called. This forces hfsplus_asc2uni() to naturally<br \/>\nreturn -ENAMETOOLONG, which propagates to hfsplus_cat_build_key() and<br \/>\nexercises the faulty error path. The following warning was observed<br \/>\nduring mount:<\/p>\n<p>\t=========================<br \/>\n\tWARNING: held lock freed!<br \/>\n\t7.0.0-rc3-00016-gb4f0dd314b39 #4 Not tainted<br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n\tmount\/174 is freeing memory ffff888103f92000-ffff888103f92fff, with a lock still held there!<br \/>\n\tffff888103f920b0 (&amp;tree-&gt;tree_lock){+.+.}-{4:4}, at: hfsplus_find_init+0x154\/0x1e0<br \/>\n\t2 locks held by mount\/174:<br \/>\n\t#0: ffff888103f960e0 (&amp;type-&gt;s_umount_key#42\/1){+.+.}-{4:4}, at: alloc_super.constprop.0+0x167\/0xa40<br \/>\n\t#1: ffff888103f920b0 (&amp;tree-&gt;tree_lock){+.+.}-{4:4}, at: hfsplus_find_init+0x154\/0x1e0<\/p>\n<p>\tstack backtrace:<br \/>\n\tCPU: 2 UID: 0 PID: 174 Comm: mount Not tainted 7.0.0-rc3-00016-gb4f0dd314b39 #4 PREEMPT(lazy)<br \/>\n\tHardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04\/01\/2014<br \/>\n\tCall Trace:<\/p>\n<p>\tdump_stack_lvl+0x82\/0xd0<br \/>\n\tdebug_check_no_locks_freed+0x13a\/0x180<br \/>\n\tkfree+0x16b\/0x510<br \/>\n\t? hfsplus_fill_super+0xcb4\/0x18a0<br \/>\n\thfsplus_fill_super+0xcb4\/0x18a0<br \/>\n\t? __pfx_hfsplus_fill_super+0x10\/0x10<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? bdev_open+0x65f\/0xc30<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? pointer+0x4ce\/0xbf0<br \/>\n\t? trace_contention_end+0x11c\/0x150<br \/>\n\t? __pfx_pointer+0x10\/0x10<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? bdev_open+0x79b\/0xc30<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? vsnprintf+0x6da\/0x1270<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? __mutex_unlock_slowpath+0x157\/0x740<br \/>\n\t? __pfx_vsnprintf+0x10\/0x10<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? mark_held_locks+0x49\/0x80<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? irqentry_exit+0x17b\/0x5e0<br \/>\n\t? trace_irq_disable.constprop.0+0x116\/0x150<br \/>\n\t? __pfx_hfsplus_fill_super+0x10\/0x10<br \/>\n\t? __pfx_hfsplus_fill_super+0x10\/0x10<br \/>\n\tget_tree_bdev_flags+0x302\/0x580<br \/>\n\t? __pfx_get_tree_bdev_flags+0x10\/0x10<br \/>\n\t? vfs_parse_fs_qstr+0x129\/0x1a0<br \/>\n\t? __pfx_vfs_parse_fs_qstr+0x3\/0x10<br \/>\n\tvfs_get_tree+0x89\/0x320<br \/>\n\tfc_mount+0x10\/0x1d0<br \/>\n\tpath_mount+0x5c5\/0x21c0<br \/>\n\t? __pfx_path_mount+0x10\/0x10<br \/>\n\t? trace_irq_enable.constprop.0+0x116\/0x150<br \/>\n\t? trace_irq_enable.constprop.0+0x116\/0x150<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? kmem_cache_free+0x307\/0x540<br \/>\n\t? user_path_at+0x51\/0x60<br \/>\n\t? __x64_sys_mount+0x212\/0x280<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t__x64_sys_mount+0x212\/0x280<br \/>\n\t? __pfx___x64_sys_mount+0x10\/0x10<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\t? trace_irq_enable.constprop.0+0x116\/0x150<br \/>\n\t? srso_return_thunk+0x5\/0x5f<br \/>\n\tdo_syscall_64+0x111\/0x680<br \/>\n\tentry_SYSCALL_64_after_hwframe+0x77\/0x7f<br \/>\n\tRIP: 0033:0x7ffacad55eae<br \/>\n\tCode: 48 8b 0d 85 1f 0f 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 a5 00 00 8<br \/>\n\tRSP: 002b<br \/>\n&#8212;truncated&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>hfsplus: fix held lock freed on hfsplus_fill_super()<\/p>\n<p>hfsplus_fill_super() calls hfs_find_init() to initialize a search<br \/>\nstructure, <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-15996","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/15996","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}