{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-41056", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-07-12T12:17:45.627Z", "datePublished": "2024-07-29T14:33:27.453Z", "dateUpdated": "2026-08-05T11:35:02.501Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:35:02.501Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nfirmware: cs_dsp: Use strnlen() on name fields in V1 wmfw files\n\nUse strnlen() instead of strlen() on the algorithm and coefficient name\nstring arrays in V1 wmfw files.\n\nIn V1 wmfw files the name is a NUL-terminated string in a fixed-size\narray. cs_dsp should protect against overrunning the array if the NUL\nterminator is missing." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:H", "baseScore": 7.3, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The malicious V1 wmfw blob is delivered through `request_firmware()`/`firmware_request_nowarn()` from the local filesystem and parsed by `cs_dsp_load()`; the load is initiated locally at driver probe, DAPM stream start, or via the DSP preload ALSA control. No remote or adjacent-bus peer data reaches this parser.\nAC:L - The attacker authors the entire file, so simply omitting the NUL terminator and keeping every byte to EOF non-zero makes `strlen()` deterministically run off the end of the `vmalloc()`'d firmware buffer — no race, timing window, or memory-layout luck is involved, and the parse can be re-triggered on demand through the preload control.\nPR:L - The parse is triggered by any unprivileged local user with `/dev/snd` access (`wm_adsp2_preloader_put()` and normal playback/DAPM power-up perform no capability check), and the blob is not always root-exclusive in practice — firmware-staging/update agents, bind-mounts over `/lib/firmware/updates`, and delegated fallback-loader setups can place it within reach of a low-privileged account; choosing the higher-severity option between L and H.\nUI:N - Once the crafted wmfw is in place it is fetched and parsed automatically at driver probe or first audio stream, and the attacker can force the load from their own process via the DSP preloader; no victim action is required.\nS:U - The over-read and its consequences stay within the kernel's own security authority (the cs_dsp parser and the codec it drives); no hypervisor, IOMMU, or sandbox boundary is crossed.\nC:H - `strlen()` on an unterminated 256-byte array performs an unbounded out-of-bounds read that first traverses the un-zeroed tail of the final `vmalloc()` page — stale kernel page contents — and those bytes are echoed to the kernel log through the `cs_dsp_dbg(\"Algorithm name: %.*s\")`/`(\"Coefficient name: %.*s\")` prints, so the disclosure is neither bounded to a few bytes nor confined to the driver.\nI:L - The out-of-bounds-derived `name_len` is propagated as `subname_len` into `cs_dsp_create_control()`, where it decides whether an existing control is reused or a new one is added, leaving driver control state inconsistent with the file; this is bounded, attacker-influenced modification with no arbitrary-write primitive, since the V1 path does not copy the name (`fw_ver >= 2` gate).\nA:H - With no NUL byte before EOF the scan walks past the end of the `vmalloc()`'d firmware buffer into the guard page, producing an unhandled page fault/oops (and a KASAN out-of-bounds panic on hardened builds), which an unprivileged user can re-trigger at will through the DSP preload control." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/firmware/cirrus/cs_dsp.c" ], "versions": [ { "version": "f6bc909e7673c30abcbdb329e7d0aa2e83c103d7", "lessThan": "16d76857d6b5426f41b587d0bb925de3f25bfb21", "status": "affected", "versionType": "git" }, { "version": "f6bc909e7673c30abcbdb329e7d0aa2e83c103d7", "lessThan": "392cff2f86a25a4286ff3151c7739143c61c1781", "status": "affected", "versionType": "git" }, { "version": "f6bc909e7673c30abcbdb329e7d0aa2e83c103d7", "lessThan": "53a9f8cdbf35a682e9894e1a606f4640e5359185", "status": "affected", "versionType": "git" }, { "version": "f6bc909e7673c30abcbdb329e7d0aa2e83c103d7", "lessThan": "680e126ec0400f6daecf0510c5bb97a55779ff03", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/firmware/cirrus/cs_dsp.c" ], "versions": [ { "version": "5.16", "status": "affected" }, { "version": "0", "lessThan": "5.16", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.100", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.41", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.9.10", "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.16", "versionEndExcluding": "6.1.100" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.16", "versionEndExcluding": "6.6.41" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.16", "versionEndExcluding": "6.9.10" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.16", "versionEndExcluding": "6.10" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/16d76857d6b5426f41b587d0bb925de3f25bfb21" }, { "url": "https://git.kernel.org/stable/c/392cff2f86a25a4286ff3151c7739143c61c1781" }, { "url": "https://git.kernel.org/stable/c/53a9f8cdbf35a682e9894e1a606f4640e5359185" }, { "url": "https://git.kernel.org/stable/c/680e126ec0400f6daecf0510c5bb97a55779ff03" } ], "title": "firmware: cs_dsp: Use strnlen() on name fields in V1 wmfw files", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "https://git.kernel.org/stable/c/16d76857d6b5426f41b587d0bb925de3f25bfb21", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/392cff2f86a25a4286ff3151c7739143c61c1781", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/53a9f8cdbf35a682e9894e1a606f4640e5359185", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/680e126ec0400f6daecf0510c5bb97a55779ff03", "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:59:55.872Z" } }, { "metrics": [ { "other": { "type": "ssvc", "content": { "id": "CVE-2024-41056", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2024-09-10T16:22:25.022416Z" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-09-11T17:34:01.793Z" } } ] } }