CVE-2025-39884CWE-667

CVE-2025-39884

Medium · published September 23, 2025

CVSS v3.1
4.7
EPSS
0%
Percentile
1.1
In the wild
Unconfirmed
What it is

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

btrfs: fix subvolume deletion lockup caused by inodes xarray race

There is a race condition between inode eviction and inode caching that

can cause a live struct btrfs_inode to be missing from the root->inodes

xarray. Specifically, there is a window during evict() between the inode

being unhashed and deleted from the xarray. If btrfs_iget() is called

for the same inode in that window, it will be recreated and inserted

into the xarray, but then eviction will delete the new entry, leaving

nothing in the xarray:

Thread 1 Thread 2

---------------------------------------------------------------

evict()

remove_inode_hash()

btrfs_iget_path()

btrfs_iget_locked()

btrfs_read_locked_inode()

btrfs_add_inode_to_root()

destroy_inode()

btrfs_destroy_inode()

btrfs_del_inode_from_root()

__xa_erase

In turn, this can cause issues for subvolume deletion. Specifically, if

an inode is in this lost state, and all other inodes are evicted, then

btrfs_del_inode_from_root() will call btrfs_add_dead_root() prematurely.

If the lost inode has a delayed_node attached to it, then when

btrfs_clean_one_deleted_snapshot() calls btrfs_kill_all_delayed_nodes(),

it will loop forever because the delayed_nodes xarray will never become

empty (unless memory pressure forces the inode out). We saw this

manifest as soft lockups in production.

Fix it by only deleting the xarray entry if it matches the given inode

(using __xa_cmpxchg()).

The record
Technical detail
CVSS v3.1
4.7 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00108 · 1.1th percentile
Weakness
CWE-667 · Improper Locking
Published
2025-09-23T10:15Z
Affected products (7)
ProductVersionsFixed in
linux/linux_kernel≥ 6.11, < 6.12.486.12.48
linux/linux_kernel≥ 6.13, < 6.16.86.16.8
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (3)
EPSS history
Timeline
  • 23 SEP 06:00Z
    btrfs: fix subvolume deletion lockup caused by inodes xarray race
    cvelistv5