vfs: Don't evict inode under the inode lru traversing context
In the Linux kernel, the following vulnerability has been resolved: vfs: Don't evict inode under the inode lru traversing context The inode reclaiming process(See function prune_icache_sb) collects all reclaimable inodes and mark them with I_FREEING flag at first, at that time, other processes will be stuck if they try getting these inodes (See function find_inode_fast), then the reclaiming process destroy the inodes by function dispose_list(). Some filesystems(eg. ext4 with ea_inode feature, ubifs with xattr) may do inode lookup in the inode evicting callback function, if the inode lookup is operated under the inode lru traversing context, deadlock problems may happen. Case 1: In function ext4_evict_inode(), the ea inode lookup could happen if ea_inode feature is enabled, the lookup process will be stuck under the evicting context like this: 1. File A has inode i_reg and an ea inode i_ea 2. getfattr(A, xattr_buf) // i_ea is added into lru // lru->i_ea 3. Then, following three processes running like this: PA PB echo 2 > /proc/sys/vm/drop_caches shrink_slab prune_dcache_sb // i_reg is added into lru, lru->i_ea->i_reg prune_icache_sb list_lru_walk_one inode_lru_isolate i_ea->i_state |= I_FREEING // set inode state inode_lru_isolate __iget(i_reg) spin_unlock(&i_reg->i_lock) spin_unlock(lru_lock) rm file A i_reg->nlink = 0 iput(i_reg) // i_reg->nlink is 0, do evict ext4_evict_inode ext4_xattr_delete_inode ext4_xattr_inode_dec_ref_all ext4_xattr_inode_iget ext4_iget(i_ea->i_ino) i
- Products
- Kernel
- Affected versions
- Not specified
- Fixed versions
- 5.10.225, 5.15.166, 5.4.283, 6.1.107, 6.10.7, 6.6.48
- CVEs
- CVE-2024-45003
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 13:43 UTC · Revision 1
Source evidence
vfs: Don't evict inode under the inode lru traversing context
core-osv · Original sourcePublished 4 Sept 2024, 19:54 UTC
In the Linux kernel, the following vulnerability has been resolved: vfs: Don't evict inode under the inode lru traversing context The inode reclaiming process(See function prune_icache_sb) collects all reclaimable inodes and mark them with I_FREEING flag at first, at that time, other processes will be stuck if they try getting these inodes (See function find_inode_fast), then the reclaiming process destroy the inodes by function dispose_list(). Some filesystems(eg. ext4 with ea_inode feature, ubifs with xattr) may do inode lookup in the inode evicting callback function, if the inode lookup is operated under the inode lru traversing context, deadlock problems may happen. Case 1: In function ext4_evict_inode(), the ea inode lookup could happen if ea_inode feature is enabled, the lookup process will be stuck under the evicting context like this: 1. File A has inode i_reg and an ea inode i_ea 2. getfattr(A, xattr_buf) // i_ea is added into lru // lru->i_ea 3. Then, following three processes running like this: PA PB echo 2 > /proc/sys/vm/drop_caches shrink_slab prune_dcache_sb // i_reg is added into lru, lru->i_ea->i_reg prune_icache_sb list_lru_walk_one inode_lru_isolate i_ea->i_state |= I_FREEING // set inode state inode_lru_isolate __iget(i_reg) spin_unlock(&i_reg->i_lock) spin_unlock(lru_lock) rm file A i_reg->nlink = 0 iput(i_reg) // i_reg->nlink is 0, do evict ext4_evict_inode ext4_xattr_delete_inode ext4_xattr_inode_dec_ref_all ext4_xattr_inode_iget ext4_iget(i_ea->i_ino) i
osv:CVE-2024-45003
Kernel
Fixed versions: 5.4.283, 5.10.225, 5.15.166, 6.1.107, 6.6.48, 6.10.7
Complete source record
{
"id": "b9bb8b9b960fcc63a09dd1d93dbc6ae2d4f0658d8562b9ec41ae4288928f07ab",
"url": "https://osv.dev/vulnerability/CVE-2024-45003",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "vfs: Don't evict inode under the inode lru traversing context",
"summary": "In the Linux kernel, the following vulnerability has been resolved: vfs: Don't evict inode under the inode lru traversing context The inode reclaiming process(See function prune_icache_sb) collects all reclaimable inodes and mark them with I_FREEING flag at first, at that time, other processes will be stuck if they try getting these inodes (See function find_inode_fast), then the reclaiming process destroy the inodes by function dispose_list(). Some filesystems(eg. ext4 with ea_inode feature, ubifs with xattr) may do inode lookup in the inode evicting callback function, if the inode lookup is operated under the inode lru traversing context, deadlock problems may happen. Case 1: In function ext4_evict_inode(), the ea inode lookup could happen if ea_inode feature is enabled, the lookup process will be stuck under the evicting context like this: 1. File A has inode i_reg and an ea inode i_ea 2. getfattr(A, xattr_buf) // i_ea is added into lru // lru->i_ea 3. Then, following three processes running like this: PA PB echo 2 > /proc/sys/vm/drop_caches shrink_slab prune_dcache_sb // i_reg is added into lru, lru->i_ea->i_reg prune_icache_sb list_lru_walk_one inode_lru_isolate i_ea->i_state |= I_FREEING // set inode state inode_lru_isolate __iget(i_reg) spin_unlock(&i_reg->i_lock) spin_unlock(lru_lock) rm file A i_reg->nlink = 0 iput(i_reg) // i_reg->nlink is 0, do evict ext4_evict_inode ext4_xattr_delete_inode ext4_xattr_inode_dec_ref_all ext4_xattr_inode_iget ext4_iget(i_ea->i_ino) i",
"evidence": "osv:CVE-2024-45003",
"products": [
{
"name": {
"value": "Kernel",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "5.4.283",
"evidence": "/affected/1/ranges"
},
{
"value": "5.10.225",
"evidence": "/affected/1/ranges"
},
{
"value": "5.15.166",
"evidence": "/affected/1/ranges"
},
{
"value": "6.1.107",
"evidence": "/affected/1/ranges"
},
{
"value": "6.6.48",
"evidence": "/affected/1/ranges"
},
{
"value": "6.10.7",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "CVE-2024-45003",
"aliases": [
"CVE-2024-45003"
],
"affected": [
{
"ranges": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "e50e5129f384ae282adebfb561189cdb19b81cee"
},
{
"fixed": "3525ad25240dfdd8c78f3470911ed10aa727aa72"
},
{
"fixed": "03880af02a78bc9a98b5a581f529cf709c88a9b8"
},
{
"fixed": "cda54ec82c0f9d05393242b20b13f69b083f7e88"
},
{
"fixed": "437741eba63bf4e437e2beb5583f8633556a2b98"
},
{
"fixed": "b9bda5f6012dd00372f3a06a82ed8971a4c57c32"
},
{
"fixed": "9063ab49c11e9518a3f2352434bb276cc8134c5f"
},
{
"fixed": "2a0629834cd82f05d424bbc193374f9a43d1f87d"
}
]
}
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2024-45003.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "4.13.0"
},
{
"fixed": "5.4.283"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.5.0"
},
{
"fixed": "5.10.225"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.11.0"
},
{
"fixed": "5.15.166"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.16.0"
},
{
"fixed": "6.1.107"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.2.0"
},
{
"fixed": "6.6.48"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.7.0"
},
{
"fixed": "6.10.7"
}
]
}
],
"package": {
"name": "Kernel",
"ecosystem": "Linux"
},
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2024-45003.json"
}
}
],
"modified": "2026-10-28T02:30:29.395603174Z",
"provider": "osv",
"references": [
"https://git.kernel.org/stable/c/03880af02a78bc9a98b5a581f529cf709c88a9b8",
"https://git.kernel.org/stable/c/2a0629834cd82f05d424bbc193374f9a43d1f87d",
"https://git.kernel.org/stable/c/3525ad25240dfdd8c78f3470911ed10aa727aa72",
"https://git.kernel.org/stable/c/437741eba63bf4e437e2beb5583f8633556a2b98",
"https://git.kernel.org/stable/c/9063ab49c11e9518a3f2352434bb276cc8134c5f",
"https://git.kernel.org/stable/c/b9bda5f6012dd00372f3a06a82ed8971a4c57c32",
"https://git.kernel.org/stable/c/cda54ec82c0f9d05393242b20b13f69b083f7e88",
"https://lists.debian.org/debian-lts-announce/2024/10/msg00003.html",
"https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/45xxx/CVE-2024-45003.json",
"https://nvd.nist.gov/vuln/detail/CVE-2024-45003",
"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
],
"provider_metadata": {
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/45xxx/CVE-2024-45003.json"
}
},
"related_cves": [
{
"value": "CVE-2024-45003",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 496041,
"published_at": "2024-09-04T19:54:46.276+00:00"
}