{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-41014", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-07-12T12:17:45.611Z", "datePublished": "2024-07-29T06:37:00.826Z", "dateUpdated": "2026-08-05T11:34:39.966Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:34:39.966Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: add bounds checking to xlog_recover_process_data\n\nThere is a lack of verification of the space occupied by fixed members\nof xlog_op_header in the xlog_recover_process_data.\n\nWe can create a crafted image to trigger an out of bounds read by\nfollowing these steps:\n 1) Mount an image of xfs, and do some file operations to leave records\n 2) Before umounting, copy the image for subsequent steps to simulate\n abnormal exit. Because umount will ensure that tail_blk and\n head_blk are the same, which will result in the inability to enter\n xlog_recover_process_data\n 3) Write a tool to parse and modify the copied image in step 2\n 4) Make the end of the xlog_op_header entries only 1 byte away from\n xlog_rec_header->h_size\n 5) xlog_rec_header->h_num_logops++\n 6) Modify xlog_rec_header->h_crc\n\nFix:\nAdd a check to make sure there is sufficient space to access fixed members\nof xlog_op_header." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:H", "baseScore": 7.1, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The vulnerable code is only reached through XFS log recovery at mount time (`xfs_log_mount()` → `xlog_recover()` → `xlog_do_recovery_pass()`), which requires the crafted filesystem image to be presented locally as a block device or loop-mounted file. There is no network-facing path to `xlog_recover_process_data()`.\nAC:L - The attacker fully controls the on-disk log: placing the final `xlog_op_header` one byte short of `h_len`, incrementing `h_num_logops`, and recomputing `h_crc` makes the overrun fire deterministically on every mount, with no race or memory-layout condition outside attacker control.\nPR:N - The attacker needs no account or privilege on the target system — they only supply the malicious image (e.g. a USB stick or disk image), and the mount is performed by the victim or by an automounter such as udisks2/systemd on a desktop or kiosk.\nUI:R - Exploitation requires a separate party to mount the crafted XFS filesystem, since `xfs_fs_type` lacks `FS_USERNS_MOUNT` and mounting needs CAP_SYS_ADMIN in the initial user namespace or an automounter acting for a physically present user.\nS:U - The out-of-bounds read and its consequences are confined to the kernel's own memory and the mounting kernel's security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - Up to 11 bytes of kernel heap memory adjacent to the `kvzalloc()`ed log buffer are read out of bounds, and `xlog_recover_process_ophdr()` then emits those bytes into the kernel log via `xfs_warn(\"bad clientid 0x%x\")`/`(\"bad length 0x%x\")`, disclosing adjacent heap contents.\nI:N - There is no out-of-bounds write, and because `dp > end` after the overrun the `dp + len > end` check in `xlog_recover_process_ophdr()` unconditionally returns `-EFSCORRUPTED` before any of the OOB-derived values (`oh_tid`, `oh_flags`) are used, so no kernel or filesystem state is modified.\nA:H - If the log buffer came from the `kvzalloc()` vmalloc fallback, the read crosses into the guard page and oopses the mounting task with recovery locks held; additionally the path executes `WARN_ON(1)` (panic on `panic_on_warn` systems) and `ASSERT(0)`/`ASSERT(dp <= end)` panics on `CONFIG_XFS_ASSERT_FATAL` builds." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/xfs/xfs_log_recover.c" ], "versions": [ { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "d1e3efe783365db59da88f08a2e0bfe1cc95b143", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "7cd9f0a33e738cd58876f1bc8d6c1aa5bc4fc8c1", "status": "affected", "versionType": "git" }, { "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "lessThan": "fb63435b7c7dc112b1ae1baea5486e0a6e27b196", "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/xfs/xfs_log_recover.c" ], "versions": [ { "version": "2.6.12", "status": "affected" }, { "version": "0", "lessThan": "2.6.12", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.120", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.64", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.11", "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": "2.6.12", "versionEndExcluding": "6.1.120" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "6.6.64" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "2.6.12", "versionEndExcluding": "6.11" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/d1e3efe783365db59da88f08a2e0bfe1cc95b143" }, { "url": "https://git.kernel.org/stable/c/7cd9f0a33e738cd58876f1bc8d6c1aa5bc4fc8c1" }, { "url": "https://git.kernel.org/stable/c/fb63435b7c7dc112b1ae1baea5486e0a6e27b196" } ], "title": "xfs: add bounds checking to xlog_recover_process_data", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "https://git.kernel.org/stable/c/fb63435b7c7dc112b1ae1baea5486e0a6e27b196", "tags": [ "x_transferred" ] }, { "url": "https://lists.debian.org/debian-lts-announce/2025/03/msg00001.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T20:38:27.100Z" } }, { "metrics": [ { "other": { "type": "ssvc", "content": { "id": "CVE-2024-41014", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2024-09-10T16:24:49.673152Z" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-09-11T17:34:05.954Z" } } ] } }