Cloudanix VulnDB

CVE-2026-46299

High · 7.0

CVSS

7.0

EPSS

0.1%

Published

Jun 8, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in Linux’s handling of Apple HFS+ disk images can let a local user or malicious file cause the whole system to become unstable or potentially be compromised.

Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
High
Impact
Privilege Gain
Component
OS kernel
Class
Memory Corruption
Remediation
Patch
Effort
Medium
Patch risk
Low

What it actually does

This is a Linux kernel HFS Plus filesystem error-path bug in hfsplus_fill_super(). During HFS+ mount handling, hfs_find_init() acquires tree->tree_lock, but if hfsplus_cat_build_key() fails, the cleanup path can free the HFS+ tree structure while its lock is still held. Freeing memory that still contains an acquired lock violates kernel locking and memory-management invariants and can lead to kernel warnings, instability, denial of service, or potentially broader memory-corruption consequences depending on kernel configuration and execution context. Exploitation is local, requires the ability to invoke or influence mounting of an HFS+ filesystem image, and is considered high complexity based on the provided CVSS vector. No public exploit maturity or known exploitation is indicated, and the EPSS score is very low.

Why it matters to the business

Systems that allow users, containers, removable media workflows, forensic tooling, backup tooling, or automated file-ingestion services to mount untrusted HFS+ images could be exposed to local kernel instability or compromise risk. The most likely operational impact is a kernel warning, crash, or denial of service during mount processing, but the assigned severity also reflects potential confidentiality and integrity impact if the memory-corruption condition were weaponized. Because the issue is in the kernel, successful exploitation can affect the entire host rather than only the mounting process. It is not listed in CISA KEV, is not reported as ransomware-used, and has no known mature exploit in the provided data, so remediation should be prioritized based on whether HFS+ mounting is enabled or reachable in the organization.

How an attack unfolds

An attacker first needs local execution or a path to cause the target system to mount attacker-controlled HFS+ filesystem data. They provide a malformed or specially crafted HFS+ volume intended to drive hfsplus_fill_super() into an error path after hfs_find_init() has acquired the catalog tree lock. When hfsplus_cat_build_key() fails, the vulnerable kernel path skips hfs_find_exit(), leaving tree->tree_lock held. Kernel cleanup then frees the tree structure while the lock remains held, triggering a held-lock-freed condition. In debug or lockdep-enabled kernels this is visible as a kernel warning; in production kernels, the practical effect may be a crash, hang, or other instability. A reliable exploit would need to shape the mount failure path and kernel memory state, which is why the attack complexity is high. There are no named threat actors or active campaigns provided for this vulnerability.

How to fix it

Upgrade the Linux kernel to a vendor release that includes the upstream fix adding the missing hfs_find_exit(&fd) call before the out_put_root cleanup path in hfsplus_fill_super(). Because no exact affected product list or fixed package versions were provided, use the relevant distribution vendor advisory and kernel changelog to identify the corrected kernel build for each platform. Where immediate patching is not possible, reduce exposure by disabling or blocking HFS+ filesystem mounting if not required, unloading or blacklisting the hfsplus kernel module where feasible, restricting mount privileges, preventing unprivileged filesystem mounts, and avoiding automated mounting of untrusted disk images or removable media. In containerized environments, avoid granting CAP_SYS_ADMIN or device access that permits mounting untrusted filesystems.

How to confirm the fix worked

Confirm that systems are running a kernel build containing the HFS+ fix for hfsplus_fill_super(). Validate through vendor package metadata, kernel changelogs, or source inspection showing that hfs_find_exit(&fd) is called on the hfsplus_cat_build_key() failure path before jumping to out_put_root. Check whether CONFIG_HFSPLUS_FS is enabled or whether the hfsplus module is present and loadable. Confirm mitigations by verifying that unprivileged users cannot mount filesystems, that hfsplus is not loaded when not needed, and that module blacklist or policy controls prevent HFS+ mounts. For exposure testing, review whether workflows automatically mount uploaded disk images, removable media, backup volumes, or forensic images using HFS+. Avoid testing with untrusted proof-of-concept images on production systems.

Typical attack path

  1. Obtain local code execution, shell access, or another mechanism that can cause the host to mount an HFS+ filesystem image.
  2. Prepare or supply an HFS+ volume/image that triggers an error in hfsplus_cat_build_key() during hfsplus_fill_super().
  3. Invoke a mount operation using the hfsplus filesystem driver, directly or through an automated media/file-processing workflow.
  4. Drive the vulnerable error path where hfs_find_init() has acquired tree->tree_lock but hfs_find_exit() is not called before cleanup.
  5. Cause the kernel to free the HFS+ tree structure while the lock is still held, resulting in a held-lock-freed condition.
  6. Leverage the resulting kernel instability for denial of service, or attempt further memory-corruption exploitation if feasible on the target kernel build.

How to detect it

To determine whether this was already triggered, review kernel logs, persistent journal logs, audit logs, crash dumps, and endpoint telemetry for HFS+ mount activity followed by kernel lock or memory-management warnings. Useful sources include dmesg, /var/log/kern.log, /var/log/messages, journalctl -k, auditd records for mount syscalls, EDR process telemetry for mount utilities, and kdump/vmcore artifacts after unexpected reboots. Look for mount attempts using filesystem type hfsplus, especially against removable media, loop devices, disk images, or user-writable paths. Correlate these events with warnings such as "held lock freed", stack frames containing hfsplus_fill_super(), hfsplus_find_init(), hfsplus_cat_build_key(), kfree(), get_tree_bdev_flags(), path_mount(), or __x64_sys_mount. Since no public exploit indicators or threat-actor-specific artifacts are provided, detection should focus on behavioral evidence: unexpected HFS+ mounts, failed HFS+ mounts, kernel warnings, crashes, and suspicious local users or services initiating mount operations.

  • WARNING: held lock freed!
  • mount is freeing memory
  • with a lock still held
  • &tree->tree_lock
  • hfsplus_fill_super
  • hfsplus_find_init
  • hfs_find_init
  • hfs_find_exit
  • hfsplus_cat_build_key
  • hfsplus_asc2uni
  • get_tree_bdev_flags
  • vfs_get_tree
  • path_mount
  • __x64_sys_mount
  • type=hfsplus
  • fstype=hfsplus
  • mount -t hfsplus
  • CONFIG_HFSPLUS_FS=y

What your security team should do

  • Inventory Linux systems where HFS+ support is enabled, loadable, or used by removable media, forensic, backup, or image-processing workflows.
  • Prioritize kernel updates for systems that allow local users, containers, automation, or services to mount HFS+ filesystems or process untrusted disk images.
  • If patching is delayed, disable or blacklist the hfsplus module where business use is not required.
  • Restrict mount capability to trusted administrators; remove CAP_SYS_ADMIN from containers and services that do not explicitly require it.
  • Disable unprivileged filesystem mounts and review automount rules for removable media or uploaded images.
  • Monitor kernel logs for held-lock-freed warnings and HFS+ mount failures, especially on shared, multi-user, or image-processing hosts.
  • Review audit logs for unexpected hfsplus mount attempts by non-administrative users or service accounts.
  • Use crash dump and kernel log retention on exposed systems to preserve evidence if exploitation causes instability or reboot.
  • Track distribution advisories for exact fixed kernel package versions because fixed_versions were not provided in the input.

The record

In the Linux kernel, the following vulnerability has been resolved: hfsplus: fix held lock freed on hfsplus_fill_super() hfsplus_fill_super() calls hfs_find_init() to initialize a search structure, which acquires tree->tree_lock. If the subsequent call to hfsplus_cat_build_key() fails, the function jumps to the out_put_root error label without releasing the lock. The later cleanup path then frees the tree data structure with the lock still held, triggering a held lock freed warning. Fix this by adding the missing hfs_find_exit(&fd) call before jumping to the out_put_root error label. This ensures that tree->tree_lock is properly released on the error path. The bug was originally detected on v6.13-rc1 using an experimental static analysis tool we are developing, and we have verified that the issue persists in the latest mainline kernel. The tool is specifically designed to detect memory management issues. It is currently under active development and not yet publicly available. We confirmed the bug by runtime testing under QEMU with x86_64 defconfig, lockdep enabled, and CONFIG_HFSPLUS_FS=y. To trigger the error path, we used GDB to dynamically shrink the max_unistr_len parameter to 1 before hfsplus_asc2uni() is called. This forces hfsplus_asc2uni() to naturally return -ENAMETOOLONG, which propagates to hfsplus_cat_build_key() and exercises the faulty error path. The following warning was observed during mount: ========================= WARNING: held lock freed! 7.0.0-rc3-00016-gb4f0dd314b39 #4 Not tainted ------------------------- mount/174 is freeing memory ffff888103f92000-ffff888103f92fff, with a lock still held there! ffff888103f920b0 (&tree->tree_lock){+.+.}-{4:4}, at: hfsplus_find_init+0x154/0x1e0 2 locks held by mount/174: #0: ffff888103f960e0 (&type->s_umount_key#42/1){+.+.}-{4:4}, at: alloc_super.constprop.0+0x167/0xa40 #1: ffff888103f920b0 (&tree->tree_lock){+.+.}-{4:4}, at: hfsplus_find_init+0x154/0x1e0 stack backtrace: CPU: 2 UID: 0 PID: 174 Comm: mount Not tainted 7.0.0-rc3-00016-gb4f0dd314b39 #4 PREEMPT(lazy) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0x82/0xd0 debug_check_no_locks_freed+0x13a/0x180 kfree+0x16b/0x510 ? hfsplus_fill_super+0xcb4/0x18a0 hfsplus_fill_super+0xcb4/0x18a0 ? __pfx_hfsplus_fill_super+0x10/0x10 ? srso_return_thunk+0x5/0x5f ? bdev_open+0x65f/0xc30 ? srso_return_thunk+0x5/0x5f ? pointer+0x4ce/0xbf0 ? trace_contention_end+0x11c/0x150 ? __pfx_pointer+0x10/0x10 ? srso_return_thunk+0x5/0x5f ? bdev_open+0x79b/0xc30 ? srso_return_thunk+0x5/0x5f ? srso_return_thunk+0x5/0x5f ? vsnprintf+0x6da/0x1270 ? srso_return_thunk+0x5/0x5f ? __mutex_unlock_slowpath+0x157/0x740 ? __pfx_vsnprintf+0x10/0x10 ? srso_return_thunk+0x5/0x5f ? srso_return_thunk+0x5/0x5f ? mark_held_locks+0x49/0x80 ? srso_return_thunk+0x5/0x5f ? srso_return_thunk+0x5/0x5f ? irqentry_exit+0x17b/0x5e0 ? trace_irq_disable.constprop.0+0x116/0x150 ? __pfx_hfsplus_fill_super+0x10/0x10 ? __pfx_hfsplus_fill_super+0x10/0x10 get_tree_bdev_flags+0x302/0x580 ? __pfx_get_tree_bdev_flags+0x10/0x10 ? vfs_parse_fs_qstr+0x129/0x1a0 ? __pfx_vfs_parse_fs_qstr+0x3/0x10 vfs_get_tree+0x89/0x320 fc_mount+0x10/0x1d0 path_mount+0x5c5/0x21c0 ? __pfx_path_mount+0x10/0x10 ? trace_irq_enable.constprop.0+0x116/0x150 ? trace_irq_enable.constprop.0+0x116/0x150 ? srso_return_thunk+0x5/0x5f ? srso_return_thunk+0x5/0x5f ? kmem_cache_free+0x307/0x540 ? user_path_at+0x51/0x60 ? __x64_sys_mount+0x212/0x280 ? srso_return_thunk+0x5/0x5f __x64_sys_mount+0x212/0x280 ? __pfx___x64_sys_mount+0x10/0x10 ? srso_return_thunk+0x5/0x5f ? trace_irq_enable.constprop.0+0x116/0x150 ? srso_return_thunk+0x5/0x5f do_syscall_64+0x111/0x680 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7ffacad55eae Code: 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 RSP: 002b ---truncated---

Affected packages

Ecosystem Package Introduced Fixed
openSUSE:Tumbleweed kernel-source 0 7.0.12-1.1

Related vulnerabilities