CVE-2025-39759

Source
https://cve.org/CVERecord?id=CVE-2025-39759
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2025-39759.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2025-39759
Downstream
Related
Published
2025-09-11T16:52:28.314Z
Modified
2026-03-20T12:43:02.416771Z
Summary
btrfs: qgroup: fix race between quota disable and quota rescan ioctl
Details

In the Linux kernel, the following vulnerability has been resolved:

btrfs: qgroup: fix race between quota disable and quota rescan ioctl

There's a race between a task disabling quotas and another running the rescan ioctl that can result in a use-after-free of qgroup records from the fsinfo->qgrouptree rbtree.

This happens as follows:

1) Task A enters btrfsioctlquotarescan() -> btrfsqgroup_rescan();

2) Task B enters btrfsquotadisable() and calls btrfsqgroupwaitforcompletion(), which does nothing because at that point fsinfo->qgrouprescan_running is false (it wasn't set yet by task A);

3) Task B calls btrfsfreeqgroupconfig() which starts freeing qgroups from fsinfo->qgrouptree without taking the lock fsinfo->qgroup_lock;

4) Task A enters qgrouprescanzerotracking() which starts iterating the fsinfo->qgrouptree tree while holding fsinfo->qgroup_lock, but task B is freeing qgroup records from that tree without holding the lock, resulting in a use-after-free.

Fix this by taking fsinfo->qgrouplock at btrfsfreeqgroupconfig(). Also at btrfsqgroup_rescan() don't start the rescan worker if quotas were already disabled.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/39xxx/CVE-2025-39759.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
e685da14af6b31e4b336a110cb1bae1afc268be8
Fixed
7cda0fdde5d9890976861421d207870500f9aace
Fixed
b172535ccba12f0cf7d23b3b840989de47fc104d
Fixed
dd0b28d877b293b1d7f8727a7de08ae36b6b9ef0
Fixed
c38028ce0d0045ca600b6a8345a0ff92bfb47b66
Fixed
2fd0f5ceb997f90f4332ccbab6c7e907e6b2d0eb
Fixed
e1249667750399a48cafcf5945761d39fa584edf

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2025-39759.json"