{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-39496", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-06-25T14:23:23.751Z", "datePublished": "2024-07-12T12:20:31.669Z", "dateUpdated": "2026-08-05T11:33:45.997Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:33:45.997Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: zoned: fix use-after-free due to race with dev replace\n\nWhile loading a zone's info during creation of a block group, we can race\nwith a device replace operation and then trigger a use-after-free on the\ndevice that was just replaced (source device of the replace operation).\n\nThis happens because at btrfs_load_zone_info() we extract a device from\nthe chunk map into a local variable and then use the device while not\nunder the protection of the device replace rwsem. So if there's a device\nreplace operation happening when we extract the device and that device\nis the source of the replace operation, we will trigger a use-after-free\nif before we finish using the device the replace operation finishes and\nfrees the device.\n\nFix this by enlarging the critical section under the protection of the\ndevice replace rwsem so that all uses of the device are done inside the\ncritical section." } ], "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 path is entered through ordinary local filesystem activity (write/create syscalls forcing chunk allocation on a mounted zoned btrfs); no network or adjacent-network interface is involved.\nAC:L - The attacker drives the block-group-creation side of the race continuously and at will, and the window is unusually wide because the reader blocks in report-zones I/O holding the stale device pointer while the freeing side runs synchronize_rcu() before kfree(), so repeated attempts yield reliable success once a replace is in flight.\nPR:L - No capability is checked anywhere on the btrfs_chunk_alloc → btrfs_create_chunk → btrfs_make_block_group → btrfs_load_zone_info path; any unprivileged local user with write access to the zoned btrfs mount can force new block group creation and execute the use-after-free.\nUI:N - The attacker triggers the vulnerable code entirely through their own filesystem writes; no victim must open a file, click anything, or otherwise interact.\nS:U - The corruption occurs in kernel memory and is exploited by a local user against the same kernel; there is no crossing into a different security authority such as a hypervisor or IOMMU boundary.\nC:H - The freed struct btrfs_device is dereferenced for bdev, name and zone_info, and test_bit() reads through the freed zone_info->seq_zones bitmap; after reclaiming the kmalloc'd object with sprayed data this yields an attacker-directed kernel memory read.\nI:H - btrfs_dev_clear_zone_empty() performs a __clear_bit() write through zone_info->empty_zones with both the base pointer and the bit index shift read out of the freed object, giving a controlled write primitive suitable for privilege escalation.\nA:H - Even without successful reclaim, dereferencing the freed device and issuing blkdev_report_zones() on a closed block device oopses the kernel inside a transaction, panicking the system or forcing the filesystem read-only." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/btrfs/zoned.c" ], "versions": [ { "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141", "lessThan": "17765964703b88d8befd899f8501150bb7e07e43", "status": "affected", "versionType": "git" }, { "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141", "lessThan": "092571ef9a812566c8f2c9038d9c2a64c49788d6", "status": "affected", "versionType": "git" }, { "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141", "lessThan": "a0cc006f4214b87e70983c692e05bb36c59b5752", "status": "affected", "versionType": "git" }, { "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141", "lessThan": "0090d6e1b210551e63cf43958dc7a1ec942cdde9", "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/btrfs/zoned.c" ], "versions": [ { "version": "5.11", "status": "affected" }, { "version": "0", "lessThan": "5.11", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.95", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.35", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.9.6", "lessThanOrEqual": "6.9.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.10", "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": "5.11", "versionEndExcluding": "6.1.95" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.11", "versionEndExcluding": "6.6.35" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.11", "versionEndExcluding": "6.9.6" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.11", "versionEndExcluding": "6.10" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/17765964703b88d8befd899f8501150bb7e07e43" }, { "url": "https://git.kernel.org/stable/c/092571ef9a812566c8f2c9038d9c2a64c49788d6" }, { "url": "https://git.kernel.org/stable/c/a0cc006f4214b87e70983c692e05bb36c59b5752" }, { "url": "https://git.kernel.org/stable/c/0090d6e1b210551e63cf43958dc7a1ec942cdde9" } ], "title": "btrfs: zoned: fix use-after-free due to race with dev replace", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "https://git.kernel.org/stable/c/17765964703b88d8befd899f8501150bb7e07e43", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/092571ef9a812566c8f2c9038d9c2a64c49788d6", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/a0cc006f4214b87e70983c692e05bb36c59b5752", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/0090d6e1b210551e63cf43958dc7a1ec942cdde9", "tags": [ "x_transferred" ] }, { "url": "https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T21:56:14.179Z" } }, { "metrics": [ { "other": { "type": "ssvc", "content": { "id": "CVE-2024-39496", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2024-09-10T17:07:26.275755Z" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-09-11T17:34:39.782Z" } } ] } }