{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-49943", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-10-21T12:17:06.044Z", "datePublished": "2024-10-21T18:02:01.794Z", "dateUpdated": "2026-08-05T11:40:36.495Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:40:36.495Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/xe/guc_submit: add missing locking in wedged_fini\n\nAny non-wedged queue can have a zero refcount here and can be running\nconcurrently with an async queue destroy, therefore dereferencing the\nqueue ptr to check wedge status after the lookup can trigger UAF if\nqueue is not wedged. Fix this by keeping the submission_state lock held\naround the check to postpone the free and make the check safe, before\ndropping again around the put() to avoid the deadlock.\n\n(cherry picked from commit d28af0b6b9580b9f90c265a7da0315b0ad20bbfd)" } ], "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 attacker's side of the race is driven entirely through local interfaces — opening /dev/dri/renderD*, creating/destroying exec queues, and submitting a hanging batch — and the fini handler runs from local device unwind. No network or adjacent-network data reaches this code.\nAC:L - The attacker controls the freeing side (many concurrent async exec-queue destroys, with the kmalloc bucket chosen via the queue `width`) and induces the wedge that makes a rebind the documented recovery, so attempts are repeatable and need no memory layout the attacker cannot influence; queues stuck in `xe_sched_entity_fini()` on a wedged GPU naturally complete during the same unwind that runs `guc_submit_wedged_fini()`.\nPR:L - `XE_EXEC_QUEUE_CREATE`/`XE_EXEC_QUEUE_DESTROY` and `XE_EXEC` are `DRM_RENDER_ALLOW` with no capability, DRM-master, or init-namespace requirement — ordinary render-node access suffices to arm the zero-refcount queues and drive the concurrent free.\nUI:N - No victim must open or process attacker-supplied content; the device-lifetime teardown that fires the devres action occurs automatically via VF/hot-remove lifecycle or an automated udev rebind-recovery agent reacting to the attacker-induced wedged device.\nS:U - The use-after-free corrupts GPU driver objects inside the host kernel's own security authority, with no VM, IOMMU, or sandbox boundary crossed.\nC:H - `exec_queue_wedged()` dereferences `q->guc` after both `q` and the `xe_guc_exec_queue` are freed; once the generic kmalloc slot is resprayed, `q->guc` is an attacker-controlled pointer, turning the state read into disclosure of arbitrary kernel memory.\nI:H - If the reused memory shows the WEDGED bit, `xe_exec_queue_put()` executes against the freed/reallocated object — a refcount decrement into live memory plus `xe_exec_queue_destroy()`'s `list_del` on `q->multi_gt_list` (arbitrary unlink write) and an indirect call through `q->ops->fini(q)`, a classic control-flow hijack primitive.\nA:H - The stale dereference and the spurious `xe_exec_queue_put()` produce a KASAN-visible use-after-free, refcount underflow, and double free during driver unwind, oopsing or panicking the kernel." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/gpu/drm/xe/xe_guc_submit.c" ], "versions": [ { "version": "8ed9aaae39f39130b7a3eb2726be05d7f64b344c", "lessThan": "d88f9bab7e62dd0dbe983fa70cf040042a60cc84", "status": "affected", "versionType": "git" }, { "version": "8ed9aaae39f39130b7a3eb2726be05d7f64b344c", "lessThan": "790533e44bfc7af929842fccd9674c9f424d4627", "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/gpu/drm/xe/xe_guc_submit.c" ], "versions": [ { "version": "6.11", "status": "affected" }, { "version": "0", "lessThan": "6.11", "status": "unaffected", "versionType": "semver" }, { "version": "6.11.3", "lessThanOrEqual": "6.11.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12", "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.11", "versionEndExcluding": "6.11.3" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.11", "versionEndExcluding": "6.12" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/d88f9bab7e62dd0dbe983fa70cf040042a60cc84" }, { "url": "https://git.kernel.org/stable/c/790533e44bfc7af929842fccd9674c9f424d4627" } ], "title": "drm/xe/guc_submit: add missing locking in wedged_fini", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "other": { "type": "ssvc", "content": { "id": "CVE-2024-49943", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2024-10-22T13:37:27.904932Z" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-10-22T13:38:50.255Z" } } ] } }