{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-37869", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T04:51:23.959Z", "datePublished": "2025-05-09T06:43:58.083Z", "dateUpdated": "2026-08-05T11:57:55.564Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:57:55.564Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/xe: Use local fence in error path of xe_migrate_clear\n\nThe intent of the error path in xe_migrate_clear is to wait on locally\ngenerated fence and then return. The code is waiting on m->fence which\ncould be the local fence but this is only stable under the job mutex\nleading to a possible UAF. Fix code to wait on local fence.\n\n(cherry picked from commit 762b7e95362170b3e13a8704f38d5e47eca4ba74)" } ], "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 path is reached only through local DRM ioctls (XE_GEM_CREATE / XE_VM_BIND / XE_EXEC) on /dev/dri/renderD*, which drive TTM BO moves into xe_bo_move() → xe_migrate_clear(). There is no network or remote-peer input path into this code.\nAC:L - The attacker controls both sides of the race — it forces the err_sync path deterministically by filling the kernel_bb_pool and signalling the thread blocked in the interruptible drm_suballoc_insert() wait, while concurrent threads churn the tile-global m->fence via other BO moves. Because dma_fence_wait() holds no reference for the full blocking wait, the free-and-reuse window is milliseconds-to-seconds wide rather than a few instructions.\nPR:L - All xe ioctls involved are DRM_RENDER_ALLOW, so any local unprivileged user (or sandboxed/containerized app) with render-node access — the default for logged-in desktop users via logind ACLs and for graphics-group apps on Android/embedded Intel Xe systems — can reach it. No capabilities or root are needed.\nUI:N - The attacking process performs the GEM allocations, concurrent migrations and signal delivery entirely on its own. No action by another user or victim application is required.\nS:U - The use-after-free corrupts kernel heap memory within the same host kernel security authority; there is no VM, IOMMU or sandbox boundary crossed by the defect itself.\nC:H - The freed dma_fence is dereferenced for ops, flags and lock, giving a read primitive over reclaimed slab memory whose contents the attacker can groom via heap spraying, and stale/reused fence state can be observed. Per UAF guidance this is High.\nI:H - dma_fence_default_wait() links a callback into the freed object's cb_list under its lock, writing pointers into memory that may already belong to another allocation, and dma_fence_wait_timeout() performs an indirect call through ops->wait read from freed memory — a control-flow hijack primitive.\nA:H - Dereferencing a freed drm_sched_fence reliably produces an oops/panic (or slab corruption) even when not weaponized, and if the fence is freed while the thread sleeps it will never be signalled, hanging the task with GPU migration state held." } ] } ], "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_migrate.c" ], "versions": [ { "version": "dd08ebf6c3525a7ea2186e636df064ea47281987", "lessThan": "2ac5f466f62892a7d1ac2d1a3eb6cd14efbe2f2d", "status": "affected", "versionType": "git" }, { "version": "dd08ebf6c3525a7ea2186e636df064ea47281987", "lessThan": "dc712938aa26b001f448d5e93f59d57fa80f2dbd", "status": "affected", "versionType": "git" }, { "version": "dd08ebf6c3525a7ea2186e636df064ea47281987", "lessThan": "20659d3150f1a2a258a173fe011013178ff2a197", "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_migrate.c" ], "versions": [ { "version": "6.8", "status": "affected" }, { "version": "0", "lessThan": "6.8", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.25", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.14.4", "lessThanOrEqual": "6.14.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.15", "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.12.25" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.8", "versionEndExcluding": "6.14.4" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.8", "versionEndExcluding": "6.15" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/2ac5f466f62892a7d1ac2d1a3eb6cd14efbe2f2d" }, { "url": "https://git.kernel.org/stable/c/dc712938aa26b001f448d5e93f59d57fa80f2dbd" }, { "url": "https://git.kernel.org/stable/c/20659d3150f1a2a258a173fe011013178ff2a197" } ], "title": "drm/xe: Use local fence in error path of xe_migrate_clear", "x_generator": { "engine": "bippy-1.2.0" } } } }