High · published June 24, 2026
In the Linux kernel, the following vulnerability has been resolved:
quota: Fix race of dquot_scan_active() with quota deactivation
dquot_scan_active() can race with quota deactivation in
quota_release_workfn() like:
CPU0 (quota_release_workfn) CPU1 (dquot_scan_active)
============================== ==============================
spin_lock(&dq_list_lock);
list_replace_init(
&releasing_dquots, &rls_head);
/* dquot X on rls_head,
dq_count == 0,
DQ_ACTIVE_B still set */
spin_unlock(&dq_list_lock);
synchronize_srcu(&dquot_srcu);
spin_lock(&dq_list_lock);
list_for_each_entry(dquot,
&inuse_list, dq_inuse) {
/* finds dquot X */
dquot_active(X) -> true
atomic_inc(&X->dq_count);
}
spin_unlock(&dq_list_lock);
spin_lock(&dq_list_lock);
dquot = list_first_entry(&rls_head);
WARN_ON_ONCE(atomic_read(&dquot->dq_count));
The problem is not only a cosmetic one as under memory pressure the
caller of dquot_scan_active() can end up working on freed dquot.
Fix the problem by making sure the dquot is removed from releasing list
when we acquire a reference to it.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 4.19.297, < 4.20 | 4.20 |
| linux/linux_kernel | ≥ 5.4.259, < 5.5 | 5.5 |
| linux/linux_kernel | ≥ 5.10.199, < 5.10.258 | 5.10.258 |
| linux/linux_kernel | ≥ 5.15.136, < 5.15.209 | 5.15.209 |
| linux/linux_kernel | ≥ 6.1.59, < 6.1.175 | 6.1.175 |
| linux/linux_kernel | ≥ 6.5.8, < 6.6 | 6.6 |
| linux/linux_kernel | ≥ 6.6.1, < 6.6.141 | 6.6.141 |
| linux/linux_kernel | ≥ 6.7, < 6.12.91 | 6.12.91 |
| linux/linux_kernel | ≥ 6.13, < 6.18.33 | 6.18.33 |
| linux/linux_kernel | ≥ 6.19, < 7.0.10 | 7.0.10 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |