CVE-2024-47679

Source
https://nvd.nist.gov/vuln/detail/CVE-2024-47679
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2024-47679.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2024-47679
Downstream
Related
Published
2024-10-21T11:53:22.469Z
Modified
2025-11-27T02:32:54.071314Z
Summary
vfs: fix race between evice_inodes() and find_inode()&iput()
Details

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

vfs: fix race between eviceinodes() and findinode()&iput()

Hi, all

Recently I noticed a bug[1] in btrfs, after digged it into and I believe it'a race in vfs.

Let's assume there's a inode (ie ino 261) with icount 1 is called by iput(), and there's a concurrent thread calling genericshutdown_super().

cpu0: cpu1: iput() // icount is 1 ->spinlock(inode) ->dec icount to 0 ->iputfinal() genericshutdownsuper() ->_inodeaddlru() ->evictinodes() // cause some reason[2] ->if (atomicread(inode->icount)) continue; // return before // inode 261 passed the above check // listlruaddobj() // and then schedule out ->spinunlock() // note here: the inode 261 // was still at sb list and hash list, // and IFREEING|IWILL_FREE was not been set

btrfsiget() // after some function calls ->findinode() // found the above inode 261 ->spinlock(inode) // check IFREEING|IWILLFREE // and passed ->_iget() ->spinunlock(inode) // schedule back ->spinlock(inode) // check (INEW|IFREEING|IWILLFREE) flags, // passed and set IFREEING iput() ->spinunlock(inode) ->spinlock(inode) ->evict() // dec icount to 0 ->iputfinal() ->spin_unlock() ->evict()

Now, we have two threads simultaneously evicting the same inode, which may trigger the BUG(inode->istate & ICLEAR) statement both within clear_inode() and iput().

To fix the bug, recheck the inode->icount after holding ilock. Because in the most scenarios, the first check is valid, and the overhead of spin_lock() can be reduced.

If there is any misunderstanding, please let me know, thanks.

return false when I reproduced the bug.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/blob/cc431b3424123d84bcd7afd4de150b33f117a8ef/cves/2024/47xxx/CVE-2024-47679.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
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
6cc13a80a26e6b48f78c725c01b91987d61563ef
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
489faddb1ae75b0e1a741fe5ca2542a2b5e794a5
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
47a68c75052a660e4c37de41e321582ec9496195
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
3721a69403291e2514d13a7c3af50a006ea1153b
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
540fb13120c9eab3ef203f90c00c8e69f37449d1
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
0eed942bc65de1f93eca7bda51344290f9c573bb
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
0f8a5b6d0dafa4f533ac82e98f8b812073a7c9d1
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
6c857fb12b9137fee574443385d53914356bbe11
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
63997e98a3be68d7cec806d22bf9b02b2e1daabb
Fixed
88b1afbf0f6b221f6c5bb66cc80cd3b38d696687

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
2.6.37
Fixed
4.19.323
Type
ECOSYSTEM
Events
Introduced
4.20.0
Fixed
5.4.285
Type
ECOSYSTEM
Events
Introduced
5.5.0
Fixed
5.10.227
Type
ECOSYSTEM
Events
Introduced
5.11.0
Fixed
5.15.168
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.113
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.54
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.10.13
Type
ECOSYSTEM
Events
Introduced
6.11.0
Fixed
6.11.2