{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-56540", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-12-27T14:03:05.987Z", "datePublished": "2024-12-27T14:11:22.207Z", "dateUpdated": "2026-08-05T11:44:56.351Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:44:56.351Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\naccel/ivpu: Prevent recovery invocation during probe and resume\n\nRefactor IPC send and receive functions to allow correct\nhandling of operations that should not trigger a recovery process.\n\nExpose ivpu_send_receive_internal(), which is now utilized by the D0i3\nentry, DCT initialization, and HWS initialization functions.\nThese functions have been modified to return error codes gracefully,\nrather than initiating recovery.\n\nThe updated functions are invoked within ivpu_probe() and ivpu_resume(),\nensuring that any errors encountered during these stages result in a proper\nteardown or shutdown sequence. The previous approach of triggering recovery\nwithin these functions could lead to a race condition, potentially causing\nundefined behavior and kernel crashes due to null pointer dereferences." } ], "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 paths are reached through the DRM accel character device (`/dev/accel/accelN`) via `ivpu_submit_ioctl`/`ivpu_rpm_get()` driving runtime PM resume/suspend, or via local driver probe and system suspend/resume. No network or remote input is involved.\nAC:L - The attacker controls both sides of the race — it drives runtime resume/suspend cycles via repeated ioctls while the queued `recovery_work` runs on `system_long_wq`, and can wedge the NPU firmware with its own submitted workload to produce the required IPC timeouts. Per the race-condition guidance this is Low, and the window is widened arbitrarily by repeated triggering.\nPR:L - An open file descriptor on the accel device node is sufficient; all ivpu ioctls including `IVPU_SUBMIT` are declared with flags `0` (no `DRM_ROOT_ONLY`, no `DRM_MASTER`), and distributions shipping the Intel NPU userspace stack grant the unprivileged `render` group access to `/dev/accel/accelN`. No real root or capability is needed.\nUI:N - The attacking process performs every step itself — submitting jobs, forcing autosuspend, and re-triggering resume through ioctls. No victim action such as mounting media or opening a file is required.\nS:U - The corruption and crash are confined to kernel memory managed by the ivpu driver within the same security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - When probe fails, `ivpu_dev_init()`'s error paths never call `ivpu_pm_cancel_recovery()`, so the queued `recovery_work` operates on the `devm`-freed `struct ivpu_device`, a use-after-free of a large heap object the attacker can spray and read back through `ivpu_dev_coredump()`/firmware-log paths, and the concurrent `ivpu_fw_load()`/`ivpu_bo_vaddr()` accesses read freed firmware buffers.\nI:H - The same use-after-free gives a write primitive — `ivpu_pm_recovery_work()` writes into the freed `vdev` (`atomic_inc(&vdev->pm->reset_counter)`, `down_write(&vdev->pm->reset_lock)`, `INIT`/list operations) and the concurrent `ivpu_suspend()`/`ivpu_resume()` on the same device state performs unsynchronized MMU and firmware-memory reinitialization, which is exploitable for heap corruption and control-flow hijack.\nA:H - The commit message explicitly states the race causes \"undefined behavior and kernel crashes due to null pointer dereferences\"; `ivpu_pm_prepare_warm_boot()` dereferences `ivpu_bo_vaddr(fw->mem)` after teardown, and recovery re-entering `pm_runtime_resume_and_get()` from inside a runtime PM callback while holding `reset_lock` can deadlock the device." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/accel/ivpu/ivpu_ipc.c", "drivers/accel/ivpu/ivpu_ipc.h", "drivers/accel/ivpu/ivpu_jsm_msg.c" ], "versions": [ { "version": "45e45362e0955fc3b0b622e8a0d788097f3de902", "lessThan": "cac822772c4dc27a285f09caf30072ab76d2bf38", "status": "affected", "versionType": "git" }, { "version": "45e45362e0955fc3b0b622e8a0d788097f3de902", "lessThan": "362ef76020ea6219a4df4ac5b738672b59527239", "status": "affected", "versionType": "git" }, { "version": "45e45362e0955fc3b0b622e8a0d788097f3de902", "lessThan": "5eaa497411197c41b0813d61ba3fbd6267049082", "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/accel/ivpu/ivpu_ipc.c", "drivers/accel/ivpu/ivpu_ipc.h", "drivers/accel/ivpu/ivpu_jsm_msg.c" ], "versions": [ { "version": "6.8", "status": "affected" }, { "version": "0", "lessThan": "6.8", "status": "unaffected", "versionType": "semver" }, { "version": "6.11.11", "lessThanOrEqual": "6.11.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.2", "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": "6.8", "versionEndExcluding": "6.11.11" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.8", "versionEndExcluding": "6.12.2" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.8", "versionEndExcluding": "6.13" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/cac822772c4dc27a285f09caf30072ab76d2bf38" }, { "url": "https://git.kernel.org/stable/c/362ef76020ea6219a4df4ac5b738672b59527239" }, { "url": "https://git.kernel.org/stable/c/5eaa497411197c41b0813d61ba3fbd6267049082" } ], "title": "accel/ivpu: Prevent recovery invocation during probe and resume", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "cvssV3_1": { "scope": "UNCHANGED", "version": "3.1", "baseScore": 4.7, "attackVector": "LOCAL", "baseSeverity": "MEDIUM", "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H", "integrityImpact": "NONE", "userInteraction": "NONE", "attackComplexity": "HIGH", "availabilityImpact": "HIGH", "privilegesRequired": "LOW", "confidentialityImpact": "NONE" } }, { "other": { "type": "ssvc", "content": { "id": "CVE-2024-56540", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2025-10-01T20:02:29.458816Z" } } } ], "problemTypes": [ { "descriptions": [ { "lang": "en", "type": "CWE", "cweId": "CWE-476", "description": "CWE-476 NULL Pointer Dereference" } ] } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2025-10-01T20:07:16.787Z" } } ] } }