CVE-2026-31434 Overview
A memory leak vulnerability has been identified in the Linux kernel's btrfs file system implementation. The issue occurs in the create_space_info_sub_group() function when allocating elements of space_info->sub_group[]. While kobject_init_and_add() is properly called for each element via btrfs_sysfs_add_space_info_type(), the corresponding cleanup function btrfs_sysfs_remove_space_info() is not called when check_removing_space_info() frees these elements. This results in kobject_put() not being invoked, causing the associated kobj->name objects to leak.
Critical Impact
Persistent memory leaks in the btrfs file system can lead to gradual memory exhaustion on affected Linux systems, potentially causing system instability or denial of service conditions over time.
Affected Products
- Linux Kernel (btrfs file system component)
- Systems running kernels with btrfs zoned block device support
- Linux distributions with CONFIG_DEBUG_KMEMLEAK enabled (for detection)
Discovery Timeline
- April 22, 2026 - CVE-2026-31434 published to NVD
- April 23, 2026 - Last updated in NVD database
Technical Details for CVE-2026-31434
Vulnerability Analysis
This vulnerability represents a memory leak in the Linux kernel's btrfs (B-tree file system) implementation, specifically within the sysfs integration layer. The btrfs file system uses kobjects to expose space information through the sysfs interface, allowing system administrators and tools to query file system state.
When a btrfs file system is mounted, the kernel calls create_space_info_sub_group() to allocate and initialize sub-group elements for space tracking. Each element undergoes initialization through btrfs_sysfs_add_space_info_type(), which internally invokes kobject_init_and_add(). This function allocates memory for the kobject name using kstrdup() within kobject_set_name_vargs().
The vulnerability manifests during the cleanup path. When check_removing_space_info() deallocates these elements, it directly calls kfree() instead of the proper cleanup function btrfs_sysfs_remove_space_info(). As a result, kobject_put() is never called, and the dynamically allocated kobj->name strings remain in memory indefinitely.
Root Cause
The root cause is an incomplete implementation of the resource cleanup path in the btrfs sysfs integration. The kernel follows a reference-counted model for kobjects, where kobject_init_and_add() must be paired with kobject_put() to properly release all allocated resources. By bypassing this mechanism and using direct kfree(), the code violates the kobject lifecycle contract, leading to orphaned memory allocations.
The leaked memory (16 bytes per occurrence as shown in kmemleak output) accumulates with each mount/unmount cycle or space_info operation, gradually consuming system memory.
Attack Vector
The attack vector for this vulnerability is local. An attacker or legitimate user with the ability to mount and unmount btrfs file systems can trigger the memory leak repeatedly. While this is primarily a resource exhaustion vulnerability rather than an arbitrary code execution issue, in environments where untrusted users can mount file systems, this could be leveraged to degrade system performance or cause denial of service through memory exhaustion.
The vulnerability was reproduced using the blktests test case zbd/009 on kernels built with CONFIG_DEBUG_KMEMLEAK, demonstrating that the leak occurs in normal btrfs operations involving zoned block devices.
The kmemleak backtrace shows the allocation path:
__kmalloc_node_track_caller_noprof → kstrdup → kobject_set_name_vargs → kobject_init_and_add → btrfs_sysfs_add_space_info_type → create_space_info_sub_group → create_space_info → btrfs_init_space_info → open_ctree
The fix involves replacing the direct kfree() call with btrfs_sysfs_remove_space_info() to ensure proper kobject cleanup, including the release of the name string.
Detection Methods for CVE-2026-31434
Indicators of Compromise
- Gradual increase in kernel memory usage over time on systems using btrfs file systems
- Kmemleak reports showing unreferenced objects with "data-reloc" strings in memory dumps
- Repeated occurrences of memory allocation backtraces originating from btrfs_sysfs_add_space_info_type
- System performance degradation correlated with btrfs mount/unmount operations
Detection Strategies
- Enable CONFIG_DEBUG_KMEMLEAK in kernel configuration to actively detect memory leaks
- Monitor /sys/kernel/debug/kmemleak for unreferenced objects matching the btrfs sysfs allocation pattern
- Implement periodic memory auditing on systems with heavy btrfs usage
- Use kernel tracing tools (ftrace, eBPF) to monitor kobject lifecycle operations in btrfs
Monitoring Recommendations
- Set up alerts for abnormal kernel slab memory growth, particularly in kmalloc caches
- Monitor /proc/meminfo for steady increases in slab unreclaimable memory
- Implement automated scanning of kmemleak output on development and test systems
- Track system uptime correlation with memory consumption to identify leak patterns
How to Mitigate CVE-2026-31434
Immediate Actions Required
- Update the Linux kernel to a version containing the fix
- Restart systems after kernel updates to release any previously leaked memory
- Consider periodic system reboots as a temporary mitigation if immediate patching is not possible
- Review btrfs mount/unmount patterns in automated systems to minimize leak exposure
Patch Information
The Linux kernel maintainers have released patches to address this vulnerability. The fix modifies check_removing_space_info() to call btrfs_sysfs_remove_space_info() instead of directly calling kfree() for sub-group elements, ensuring proper kobject cleanup.
The following kernel commits contain the fix:
- Kernel Git Commit 1737dde
- Kernel Git Commit 3c645c6
- Kernel Git Commit 3c844d0
- Kernel Git Commit 416484f
- Kernel Git Commit 94054ff
- Kernel Git Commit a4376d9
Workarounds
- Minimize btrfs mount/unmount cycles on affected systems until patching is complete
- Consider using alternative file systems temporarily for workloads requiring frequent mount operations
- Implement scheduled reboots during maintenance windows to reclaim leaked memory
- Monitor memory usage and proactively restart services before memory exhaustion impacts production
# Check for kmemleak entries related to this vulnerability
cat /sys/kernel/debug/kmemleak | grep -A 20 "btrfs_sysfs_add_space_info_type"
# Monitor kernel slab memory usage
watch -n 60 'cat /proc/meminfo | grep -E "Slab|SUnreclaim"'
# Check kernel version for patch status
uname -r
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

