CVE-2025-39759

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 fs_info->qgroup_tree rbtree. This happens as follows: 1) Task A enters btrfs_ioctl_quota_rescan() -> btrfs_qgroup_rescan(); 2) Task B enters btrfs_quota_disable() and calls btrfs_qgroup_wait_for_completion(), which does nothing because at that point fs_info->qgroup_rescan_running is false (it wasn't set yet by task A); 3) Task B calls btrfs_free_qgroup_config() which starts freeing qgroups from fs_info->qgroup_tree without taking the lock fs_info->qgroup_lock; 4) Task A enters qgroup_rescan_zero_tracking() which starts iterating the fs_info->qgroup_tree tree while holding fs_info->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 fs_info->qgroup_lock at btrfs_free_qgroup_config(). Also at btrfs_qgroup_rescan() don't start the rescan worker if quotas were already disabled.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

Configuration 2 (hide)

cpe:2.3:o:debian:debian_linux:11.0:*:*:*:*:*:*:*

History

19 Oct 2026, 21:10

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta: btrfs: qgroup: solucionar condición de carrera entre la desactivación de cuotas y el ioctl de reescaneo de cuotas Existe una condición de carrera entre una tarea que desactiva las cuotas y otra que ejecuta el ioctl de reescaneo que puede resultar en un uso después de liberación de registros de qgroup del rbtree fs_info->qgroup_tree. Esto ocurre de la siguiente manera: 1) La Tarea A entra en btrfs_ioctl_quota_rescan() -> btrfs_qgroup_rescan(); 2) La Tarea B entra en btrfs_quota_disable() y llama a btrfs_qgroup_wait_for_completion(), lo cual no hace nada porque en ese momento fs_info->qgroup_rescan_running es falso (aún no había sido establecido por la Tarea A); 3) La Tarea B llama a btrfs_free_qgroup_config() que comienza a liberar qgroups del fs_info->qgroup_tree sin tomar el bloqueo fs_info->qgroup_lock; 4) La Tarea A entra en qgroup_rescan_zero_tracking() que comienza a iterar el árbol fs_info->qgroup_tree mientras mantiene el fs_info->qgroup_lock, pero la Tarea B está liberando registros de qgroup de ese árbol sin mantener el bloqueo, resultando en un uso después de liberación. Solucione esto tomando fs_info->qgroup_lock en btrfs_free_qgroup_config(). También en btrfs_qgroup_rescan() no inicie el trabajador de reescaneo si las cuotas ya estaban desactivadas.

Information

Published : 2025-09-11 17:15

Updated : 2026-10-19 21:10


NVD link : CVE-2025-39759

Mitre link : CVE-2025-39759

CVE.ORG link : CVE-2025-39759


JSON object : View

Products Affected

debian

  • debian_linux

linux

  • linux_kernel
CWE
CWE-362

Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')