{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2023-52981", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-03-27T16:40:15.740Z", "datePublished": "2025-03-27T16:43:20.111Z", "dateUpdated": "2026-08-05T09:12:14.346Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T09:12:14.346Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/i915: Fix request ref counting during error capture & debugfs dump\n\nWhen GuC support was added to error capture, the reference counting\naround the request object was broken. Fix it up.\n\nThe context based search manages the spinlocking around the search\ninternally. So it needs to grab the reference count internally as\nwell. The execlist only request based search relies on external\nlocking, so it needs an external reference count but within the\nspinlock not outside it.\n\nThe only other caller of the context based search is the code for\ndumping engine state to debugfs. That code wasn't previously getting\nan explicit reference at all as it does everything while holding the\nexeclist specific spinlock. So, that needs updaing as well as that\nspinlock doesn't help when using GuC submission. Rather than trying to\nconditionally get/put depending on submission model, just change it to\nalways do the get/put.\n\nv2: Explicitly document adding an extra blank line in some dense code\n(Andy Shevchenko). Fix multiple potential null pointer derefs in case\nof no request found (some spotted by Tvrtko, but there was more!).\nAlso fix a leaked request in case of !started and another in\n__guc_reset_context now that intel_context_find_active_request is\nactually reference counting the returned request.\nv3: Add a _get suffix to intel_context_find_active_request now that it\ngrabs a reference (Daniele).\nv4: Split the intel_guc_find_hung_context change to a separate patch\nand rename intel_context_find_active_request_get to\nintel_context_get_active_request (Tvrtko).\nv5: s/locking/reference counting/ in commit message (Tvrtko)\n\n(cherry picked from commit 3700e353781e27f1bc7222f51f2cc36cbeb9b4ec)" } ], "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 - Reachable only via local DRM/i915 paths (render-node execbuf inducing a GPU hang that drives GuC context-reset error capture, or local debugfs engine dump), not via network packets.\nAC:L - An unprivileged attacker can reliably submit hanging and concurrent GPU work on the render node to force GuC hang detection/error capture while controlling request retirement, so both sides of the missing-refcount race are attacker-influenced.\nPR:L - Triggering requires only ordinary render-node access (/dev/dri/renderD*) with DRM_RENDER_ALLOW ioctls; no root or init-namespace CAP_SYS_ADMIN is required.\nUI:N - The attacker induces the hang and error-capture path themselves through their own GPU submissions; no separate victim action is required.\nS:U - Impact is confined to the host kernel security authority (local privilege escalation / memory corruption), with no VM escape or IOMMU boundary crossing.\nC:H - Missing request refcounting yields a use-after-free on the i915_request/dma_fence heap object, which can be reclaimed and read for arbitrary kernel information disclosure.\nI:H - The same UAF enables heap spraying and corruption of the reused object, providing write/control-flow hijacking primitives suitable for privilege escalation.\nA:H - UAF and the related NULL-deref paths can oops/panic the kernel during error capture or GuC context reset, causing full denial of service." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/gpu/drm/i915/gt/intel_context.c", "drivers/gpu/drm/i915/gt/intel_context.h", "drivers/gpu/drm/i915/gt/intel_engine_cs.c", "drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c", "drivers/gpu/drm/i915/i915_gpu_error.c" ], "versions": [ { "version": "573ba126aef37c8315e5bb68d2dad515efa96994", "lessThan": "9467397f417dd7b5d0db91452f0474e79716a527", "status": "affected", "versionType": "git" }, { "version": "573ba126aef37c8315e5bb68d2dad515efa96994", "lessThan": "86d8ddc74124c3fdfc139f246ba6da15e45e86e3", "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/i915/gt/intel_context.c", "drivers/gpu/drm/i915/gt/intel_context.h", "drivers/gpu/drm/i915/gt/intel_engine_cs.c", "drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c", "drivers/gpu/drm/i915/i915_gpu_error.c" ], "versions": [ { "version": "5.15", "status": "affected" }, { "version": "0", "lessThan": "5.15", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.11", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.2", "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.15", "versionEndExcluding": "6.1.11" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.15", "versionEndExcluding": "6.2" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/9467397f417dd7b5d0db91452f0474e79716a527" }, { "url": "https://git.kernel.org/stable/c/86d8ddc74124c3fdfc139f246ba6da15e45e86e3" } ], "title": "drm/i915: Fix request ref counting during error capture & debugfs dump", "x_generator": { "engine": "bippy-1.2.0" } } } }