{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2024-56662","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2024-12-27T15:00:39.843Z","datePublished":"2024-12-27T15:06:24.661Z","dateUpdated":"2026-08-05T11:45:56.280Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T11:45:56.280Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nacpi: nfit: vmalloc-out-of-bounds Read in acpi_nfit_ctl\n\nFix an issue detected by syzbot with KASAN:\n\nBUG: KASAN: vmalloc-out-of-bounds in cmd_to_func drivers/acpi/nfit/\ncore.c:416 [inline]\nBUG: KASAN: vmalloc-out-of-bounds in acpi_nfit_ctl+0x20e8/0x24a0\ndrivers/acpi/nfit/core.c:459\n\nThe issue occurs in cmd_to_func when the call_pkg->nd_reserved2\narray is accessed without verifying that call_pkg points to a buffer\nthat is appropriately sized as a struct nd_cmd_pkg. This can lead\nto out-of-bounds access and undefined behavior if the buffer does not\nhave sufficient space.\n\nTo address this, a check was added in acpi_nfit_ctl() to ensure that\nbuf is not NULL and that buf_len is less than sizeof(*call_pkg)\nbefore accessing it. This ensures safe access to the members of\ncall_pkg, including the nd_reserved2 array."}],"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 vulnerability is reached exclusively through the `ND_IOCTL_CALL` ioctl on the local libnvdimm character devices `/dev/ndctl%d` or `/dev/nmem%d`, requiring local system access. There is no remote or adjacent-network path into `acpi_nfit_ctl()`.\nAC:L - The attacker fully controls `nd_size_in`/`nd_size_out` in the ioctl payload, and the u32 overflow in `__nd_ioctl()` deterministically produces an undersized `vmalloc()` buffer on every attempt; the OOB read in `cmd_to_func()` occurs unconditionally before any command-mask validation. No race, timing window, or uninfluenceable memory layout is involved.\nPR:L - The entire path from `nd_ioctl()` through `acpi_nfit_ctl()` contains no `capable()` or capability check of any kind — access is gated only by filesystem permissions on the nvdimm device node plus the `O_RDONLY` rejection, so any account or container granted write access to `/dev/ndctl0`/`/dev/nmem0` (e.g. a delegated pmem-management group or a management container given the device) can trigger it. Since no in-kernel privilege gate exists, this is scored as low privileges rather than real root.\nUI:N - Exploitation is a single self-contained ioctl issued by the attacker's own process; no victim action, mount, or file open is required.\nS:U - The out-of-bounds access corrupts and discloses kernel memory within the same kernel security authority, and does not cross a VM, IOMMU, or sandbox boundary.\nC:H - The undersized allocation causes reads of up to 40 bytes of stale kernel page data past the allocation (`nd_reserved2` and `nd_fw_size`), and the desynchronized `nd_size_in` is then passed to `acpi_evaluate_dsm()` as a buffer descriptor of attacker-chosen length (up to ~4 GB) pointing into the vmap area, exposing far more than a strictly bounded few bytes.\nI:H - The same undersized-buffer condition yields an out-of-bounds write: `call_pkg->nd_fw_size = out_obj->buffer.length` writes 4 bytes past the allocation, and `memcpy(call_pkg->nd_payload + call_pkg->nd_size_in, ...)` writes DSM output to an attacker-controlled offset roughly 4 GB beyond `buf`. An out-of-bounds write with attacker-influenced destination and length is a control-flow-hijack-capable primitive.\nA:H - The OOB access triggers a KASAN BUG on hardened kernels, and on production kernels the ~4 GB buffer length handed to the ACPI interpreter and the wild `memcpy` destination in the vmap region reliably fault, producing a kernel oops or panic. The condition is trivially repeatable."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/acpi/nfit/core.c"],"versions":[{"version":"ebe9f6f19d80d8978d16078dff3d5bd93ad8d102","lessThan":"616aa5f3c86e0479bcbb81e41c08c43ff32af637","status":"affected","versionType":"git"},{"version":"ebe9f6f19d80d8978d16078dff3d5bd93ad8d102","lessThan":"bbdb3307f609ec4dc9558770f464ede01fe52aed","status":"affected","versionType":"git"},{"version":"ebe9f6f19d80d8978d16078dff3d5bd93ad8d102","lessThan":"143f723e9eb4f0302ffb7adfdc7ef77eab3f68e0","status":"affected","versionType":"git"},{"version":"ebe9f6f19d80d8978d16078dff3d5bd93ad8d102","lessThan":"e08dc2dc3c3f7938df0e4476fe3e6fdec5583c1d","status":"affected","versionType":"git"},{"version":"ebe9f6f19d80d8978d16078dff3d5bd93ad8d102","lessThan":"212846fafb753a48e869e2a342fc1e24048da771","status":"affected","versionType":"git"},{"version":"ebe9f6f19d80d8978d16078dff3d5bd93ad8d102","lessThan":"265e98f72bac6c41a4492d3e30a8e5fd22fe0779","status":"affected","versionType":"git"},{"version":"63108f2a408abea7ecab063efa0f398da4d0d14b","status":"affected","versionType":"git"},{"version":"f5878c4f084dc6b1386dad03970bb61ad5e9dc4b","status":"affected","versionType":"git"},{"version":"0c79794474895dbbc3c52225f7e9f73cfecbb7dd","status":"affected","versionType":"git"},{"version":"4.14.176","lessThan":"4.15","status":"affected","versionType":"semver"},{"version":"4.19.31","lessThan":"4.20","status":"affected","versionType":"semver"},{"version":"5.0.4","lessThan":"5.1","status":"affected","versionType":"semver"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/acpi/nfit/core.c"],"versions":[{"version":"5.1","status":"affected"},{"version":"0","lessThan":"5.1","status":"unaffected","versionType":"semver"},{"version":"5.10.232","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.175","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.121","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.67","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.6","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.13","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.1","versionEndExcluding":"5.10.232"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.1","versionEndExcluding":"5.15.175"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.1","versionEndExcluding":"6.1.121"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.1","versionEndExcluding":"6.6.67"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.1","versionEndExcluding":"6.12.6"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.1","versionEndExcluding":"6.13"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.14.176"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.19.31"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.0.4"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/616aa5f3c86e0479bcbb81e41c08c43ff32af637"},{"url":"https://git.kernel.org/stable/c/bbdb3307f609ec4dc9558770f464ede01fe52aed"},{"url":"https://git.kernel.org/stable/c/143f723e9eb4f0302ffb7adfdc7ef77eab3f68e0"},{"url":"https://git.kernel.org/stable/c/e08dc2dc3c3f7938df0e4476fe3e6fdec5583c1d"},{"url":"https://git.kernel.org/stable/c/212846fafb753a48e869e2a342fc1e24048da771"},{"url":"https://git.kernel.org/stable/c/265e98f72bac6c41a4492d3e30a8e5fd22fe0779"}],"title":"acpi: nfit: vmalloc-out-of-bounds Read in acpi_nfit_ctl","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"metrics":[{"cvssV3_1":{"scope":"UNCHANGED","version":"3.1","baseScore":6,"attackVector":"LOCAL","baseSeverity":"MEDIUM","vectorString":"CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:H","integrityImpact":"NONE","userInteraction":"NONE","attackComplexity":"LOW","availabilityImpact":"HIGH","privilegesRequired":"HIGH","confidentialityImpact":"HIGH"}},{"other":{"type":"ssvc","content":{"id":"CVE-2024-56662","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2025-10-01T19:59:57.981489Z"}}}],"problemTypes":[{"descriptions":[{"lang":"en","type":"CWE","cweId":"CWE-125","description":"CWE-125 Out-of-bounds Read"}]}],"title":"CISA ADP Vulnrichment","providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2025-10-01T20:07:10.083Z"}},{"title":"CVE Program Container","references":[{"url":"https://lists.debian.org/debian-lts-announce/2025/03/msg00001.html"},{"url":"https://lists.debian.org/debian-lts-announce/2025/03/msg00002.html"}],"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2025-11-03T20:52:10.200Z"}}]}}