Files
vuln-cve/data/2025/39xxx/CVE-2025-39740.json
T

138 lines
7.7 KiB
JSON

{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2025-39740",
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"state": "PUBLISHED",
"assignerShortName": "Linux",
"dateReserved": "2025-04-16T07:20:57.120Z",
"datePublished": "2025-09-11T16:52:14.638Z",
"dateUpdated": "2026-08-05T12:04:57.846Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-08-05T12:04:57.846Z"
},
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/xe/migrate: prevent potential UAF\n\nIf we hit the error path, the previous fence (if there is one) has\nalready been put() prior to this, so doing a fence_wait could lead to\nUAF. Tweak the flow to do to the put() until after we do the wait.\n\n(cherry picked from commit 9b7ca35ed28fe5fad86e9d9c24ebd1271e4c9c3e)"
}
],
"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 loop is reached only through a local userspace mapping of an Intel Xe VRAM buffer object accessed via ptrace//proc/pid/mem/process_vm_readv, or via the local devcoredump snapshot path after a GPU hang. There is no network or adjacent-network exposure.\nAC:L - The attacker deterministically forces multiple loop iterations by choosing the access offset/length against a fragmented VRAM BO (or a large VM snapshot), and forces the error path by saturating the fixed-size kernel_bb_pool and signalling the waiting thread, since drm_suballoc_insert waits interruptibly and returns -ERESTARTSYS. Concurrent migrate traffic that replaces m->fence and drops the last reference is likewise generated by the attacker's own GPU submissions.\nPR:L - Only an unprivileged local user with DRM render-node access (render group, logged-in desktop user, or Android graphics group) is needed to create and mmap a VRAM BO and ptrace its own process. No root, capability, or namespace escalation is required.\nUI:N - The attacker performs the BO creation, mapping, GPU load generation, and the triggering remote-memory access entirely within its own processes. No action by any other user is required.\nS:U - The freed dma_fence and any resulting corruption stay within the host kernel's own security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - dma_fence_wait() on the freed fence dereferences fence->ops, fence->lock and fence->seqno from reclaimed slab memory, and the attacker can refill that slot with objects of its choosing by submitting more scheduler jobs, yielding an arbitrary kernel-memory read primitive.\nI:H - The same wait path writes into the freed object (list_add on cb_list, setting the ENABLE_SIGNAL flag) and performs an indirect call through fence->ops, so a heap-sprayed replacement gives both a write primitive and control-flow hijack leading to privilege escalation.\nA:H - Even without successful exploitation the use-after-free reliably produces a KASAN splat/oops, and waiting on a fence that will never signal hangs the calling task while holding the BO reservation, denying 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/xe/xe_migrate.c"
],
"versions": [
{
"version": "270172f64b114451876c1b68912653e72ab99f38",
"lessThan": "7e46fa64a4b94208563c3a5bf1d7f4346f94abea",
"status": "affected",
"versionType": "git"
},
{
"version": "270172f64b114451876c1b68912653e72ab99f38",
"lessThan": "145832fbdd17b1d77ffd6cdd1642259e101d1b7e",
"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.16",
"status": "affected"
},
{
"version": "0",
"lessThan": "6.16",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.16.2",
"lessThanOrEqual": "6.16.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.17",
"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.16",
"versionEndExcluding": "6.16.2"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.16",
"versionEndExcluding": "6.17"
}
]
}
]
}
],
"references": [
{
"url": "https://git.kernel.org/stable/c/7e46fa64a4b94208563c3a5bf1d7f4346f94abea"
},
{
"url": "https://git.kernel.org/stable/c/145832fbdd17b1d77ffd6cdd1642259e101d1b7e"
}
],
"title": "drm/xe/migrate: prevent potential UAF",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
}
}