Bug 2300455 (CVE-2024-41078)

Summary: CVE-2024-41078 kernel: btrfs: qgroup: fix quota root leak after quota disable failure
Product: [Other] Security Response Reporter: OSIDB Bzimport <bzimport>
Component: vulnerabilityAssignee: Product Security DevOps Team <prodsec-dev>
Status: NEW --- QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: unspecifiedCC: dfreiber, drow, jburrell, jobselko, vkumar
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: kernel 5.10.223, kernel 5.15.164, kernel 6.1.101, kernel 6.6.42, kernel 6.9.11, kernel 6.10 Doc Type: If docs needed, set a value
Doc Text:
A vulnerability in the Btrfs file system in the Linux Kernel was fixed to address a memory leak issue. When disabling quotas, if an error occurred during quota tree cleanup or root deletion, the code failed to release the reference to the quota root node, leading to a resource leak. The fix involved adding a `btrfs_put_root()` call in the error handling path to ensure proper reference counting and prevent memory leaks. This problem has been present since quota groups were introduced in 2012 but was only addressed recently.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2301648    
Bug Blocks:    

Description OSIDB Bzimport 2024-07-29 15:51:09 UTC
In the Linux kernel, the following vulnerability has been resolved:

btrfs: qgroup: fix quota root leak after quota disable failure

If during the quota disable we fail when cleaning the quota tree or when
deleting the root from the root tree, we jump to the 'out' label without
ever dropping the reference on the quota root, resulting in a leak of the
root since fs_info->quota_root is no longer pointing to the root (we have
set it to NULL just before those steps).

Fix this by always doing a btrfs_put_root() call under the 'out' label.
This is a problem that exists since qgroups were first added in 2012 by
commit bed92eae26cc ("Btrfs: qgroup implementation and prototypes"), but
back then we missed a kfree on the quota root and free_extent_buffer()
calls on its root and commit root nodes, since back then roots were not
yet reference counted.

Comment 1 Mauro Matteo Cascella 2024-07-30 14:06:10 UTC
Upstream advisory:
https://lore.kernel.org/linux-cve-announce/2024072925-CVE-2024-41078-ab5c@gregkh/T

Comment 2 Mauro Matteo Cascella 2024-07-30 14:06:33 UTC
Created kernel tracking bugs for this issue:

Affects: fedora-all [bug 2301648]