{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-49883", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-10-21T12:17:06.021Z", "datePublished": "2024-10-21T18:01:20.827Z", "dateUpdated": "2026-08-05T11:40:21.427Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:40:21.427Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\next4: aovid use-after-free in ext4_ext_insert_extent()\n\nAs Ojaswin mentioned in Link, in ext4_ext_insert_extent(), if the path is\nreallocated in ext4_ext_create_new_leaf(), we'll use the stale path and\ncause UAF. Below is a sample trace with dummy values:\n\next4_ext_insert_extent\n path = *ppath = 2000\n ext4_ext_create_new_leaf(ppath)\n ext4_find_extent(ppath)\n path = *ppath = 2000\n if (depth > path[0].p_maxdepth)\n kfree(path = 2000);\n *ppath = path = NULL;\n path = kcalloc() = 3000\n *ppath = 3000;\n return path;\n /* here path is still 2000, UAF! */\n eh = path[depth].p_hdr\n\n==================================================================\nBUG: KASAN: slab-use-after-free in ext4_ext_insert_extent+0x26d4/0x3330\nRead of size 8 at addr ffff8881027bf7d0 by task kworker/u36:1/179\nCPU: 3 UID: 0 PID: 179 Comm: kworker/u6:1 Not tainted 6.11.0-rc2-dirty #866\nCall Trace:\n \n ext4_ext_insert_extent+0x26d4/0x3330\n ext4_ext_map_blocks+0xe22/0x2d40\n ext4_map_blocks+0x71e/0x1700\n ext4_do_writepages+0x1290/0x2800\n[...]\n\nAllocated by task 179:\n ext4_find_extent+0x81c/0x1f70\n ext4_ext_map_blocks+0x146/0x2d40\n ext4_map_blocks+0x71e/0x1700\n ext4_do_writepages+0x1290/0x2800\n ext4_writepages+0x26d/0x4e0\n do_writepages+0x175/0x700\n[...]\n\nFreed by task 179:\n kfree+0xcb/0x240\n ext4_find_extent+0x7c0/0x1f70\n ext4_ext_insert_extent+0xa26/0x3330\n ext4_ext_map_blocks+0xe22/0x2d40\n ext4_map_blocks+0x71e/0x1700\n ext4_do_writepages+0x1290/0x2800\n ext4_writepages+0x26d/0x4e0\n do_writepages+0x175/0x700\n[...]\n==================================================================\n\nSo use *ppath to update the path to avoid the above problem." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The vulnerable code is reached only through local filesystem operations — write(2)/writeback via ext4_do_writepages → ext4_map_blocks → ext4_ext_map_blocks, direct I/O, and fallocate(2) — on a mounted ext4 volume. ext4 is a local filesystem subsystem with no network protocol handler in the path.\nAC:L - This is a deterministic stale-pointer logic bug, not a race: the attacker fully controls file fragmentation and therefore the extent-tree depth that forces ext4_ext_create_new_leaf() → ext4_ext_grow_indepth() → the reallocating ext4_find_extent(). The attacker also picks the depth so the freed kcalloc(depth+2, 48) object and the replacement land in different kmalloc size classes, leaving the freed object reclaimable by their own spraying thread.\nPR:L - There is no capable() or CAP_* check anywhere in fs/ext4/extents.c; any unprivileged local user with write access to an ext4 filesystem (/tmp, /home, Android /data, or any user-writable mount) reaches ext4_ext_insert_extent() with plain write() and fallocate() calls. No user-namespace trick or elevated privilege is needed.\nUI:N - The attacker triggers the entire sequence with their own syscalls on their own files on an already-mounted filesystem. No victim action such as mounting a crafted image or opening a supplied file is required.\nS:U - The use-after-free is confined to the kernel's own slab memory and the ext4 extent path array, so all impact stays within the kernel security authority on the same host. No hypervisor, IOMMU, or sandbox boundary is crossed.\nC:H - The freed path array is a general-cache kmalloc object the attacker can reclaim and populate via heap spraying, giving control over path[depth].p_hdr, p_ext and p_bh, which are dereferenced as kernel pointers for extent-header and buffer_head reads. Per use-after-free scoring guidance this reclaim-and-read primitive is treated as arbitrary kernel memory disclosure.\nI:H - Unlike a read-only UAF, the post-free code writes through the stale pointers: memmove(nearex+1, nearex, len * sizeof(struct ext4_extent)) with attacker-influenced source, destination and length, le16_add_cpu(&eh->eh_entries, 1), a 12-byte extent store of attacker-chosen logical/physical block values, and ext4_ext_get_access()/ext4_ext_dirty() on a stale buffer_head fed into jbd2. That is a controlled kernel write primitive suitable for privilege escalation.\nA:H - Dereferencing the freed path array in the writeback path yields a garbage extent header and buffer_head, producing the KASAN slab-use-after-free oops shown in the commit message, or a panic from the subsequent memmove and journal operations. Any use-after-free reliably crashes the kernel even when not fully weaponized." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/ext4/extents.c" ], "versions": [ { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "e17ebe4fdd7665c93ae9459ba40fcdfb76769ac1", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "975ca06f3fd154c5f7742083e7b2574c57d1c0c3", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "5e811066c5ab709b070659197dccfb80ab650ddd", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "9df59009dfc6d9fc1bd9ddf6c5ab6e56d6ed887a", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "51db04892a993cace63415be99848970a0f15ef2", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "8162ee5d94b8c0351be0a9321be134872a7654a1", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "beb7b66fb489041c50c6473100b383f7a51648fc", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "bfed082ce4b1ce6349b05c09a0fa4f3da35ecb1b", "status": "affected", "versionType": "git" }, { "version": "10809df84a4d868db61af621bae3658494165279", "lessThan": "a164f3a432aae62ca23d03e6d926b122ee5b860d", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/ext4/extents.c" ], "versions": [ { "version": "3.18", "status": "affected" }, { "version": "0", "lessThan": "3.18", "status": "unaffected", "versionType": "semver" }, { "version": "4.19.323", "lessThanOrEqual": "4.19.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.4.285", "lessThanOrEqual": "5.4.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.227", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.168", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.113", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.55", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.10.14", "lessThanOrEqual": "6.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.11.3", "lessThanOrEqual": "6.11.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "4.19.323" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "5.4.285" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "5.10.227" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "5.15.168" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "6.1.113" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "6.6.55" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "6.10.14" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "6.11.3" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.18", "versionEndExcluding": "6.12" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/e17ebe4fdd7665c93ae9459ba40fcdfb76769ac1" }, { "url": "https://git.kernel.org/stable/c/975ca06f3fd154c5f7742083e7b2574c57d1c0c3" }, { "url": "https://git.kernel.org/stable/c/5e811066c5ab709b070659197dccfb80ab650ddd" }, { "url": "https://git.kernel.org/stable/c/9df59009dfc6d9fc1bd9ddf6c5ab6e56d6ed887a" }, { "url": "https://git.kernel.org/stable/c/51db04892a993cace63415be99848970a0f15ef2" }, { "url": "https://git.kernel.org/stable/c/8162ee5d94b8c0351be0a9321be134872a7654a1" }, { "url": "https://git.kernel.org/stable/c/beb7b66fb489041c50c6473100b383f7a51648fc" }, { "url": "https://git.kernel.org/stable/c/bfed082ce4b1ce6349b05c09a0fa4f3da35ecb1b" }, { "url": "https://git.kernel.org/stable/c/a164f3a432aae62ca23d03e6d926b122ee5b860d" } ], "title": "ext4: aovid use-after-free in ext4_ext_insert_extent()", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "other": { "type": "ssvc", "content": { "id": "CVE-2024-49883", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2024-10-22T13:45:23.101470Z" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-10-22T13:48:50.259Z" } }, { "title": "CVE Program Container", "references": [ { "url": "https://lists.debian.org/debian-lts-announce/2025/03/msg00002.html" }, { "url": "https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T22:22:49.557Z" } } ] } }