Action not permitted
Modal body text goes here.
Modal Title
Modal Body
EUVD-2026-348166
European Vulnerability Database identifier assigned by ENISAReserved
2026-10-02 08:17
Assigner
ENISA
Alias of
a CVE record, shown under related vulnerabilities.
This identifier carries no description, severity or references of its own:
they belong to that CVE.
{
"assigner": "ENISA",
"date_reserved": "2026-10-02T08:17:54.811198+00:00",
"id": "EUVD-2026-348166"
}
CVE-2026-53145 (GCVE-0-2026-53145)
Vulnerability from cvelistv5 – Published: 2026-06-25 08:38 – Updated: 2026-08-05 12:33
VLAI
EPSS
VEX
Title
drm/gem: Try to fix change_handle ioctl, attempt 4
Summary
In the Linux kernel, the following vulnerability has been resolved:
drm/gem: Try to fix change_handle ioctl, attempt 4
[airlied: just added some comments on how to reenable]
On-list because the cat is out of the bag and we're clearly not good
enough to figure this out in private. The story thus far:
5e28b7b94408 ("drm: Set old handle to NULL before prime swap in
change_handle") tried to fix a race condition between the gem_close and
gem_change_handle ioctls, but got a few things wrong:
- There's a confusion with the local variable handle, which is actually
the new handle, and so the two-stage trick was actually applied to the
wrong idr slot. 7164d78559b0 ("drm/gem: fix race between
change_handle and handle_delete") tried to fix that by adding yet
another code block, but forgot to add the error handling. Which meant
we now have two paths, both kinda wrong.
- dc366607c41c ("drm: Replace old pointer to new idr") tried to apply
another fix, but inconsistently, again because of the handle confusion
- this would be the right fix (kinda, somewhat, it's a mess) if we'd
do the two-stage approach for the new handle. Except that wasn't the
intent of the original fix.
We also didn't have an igt merged for the original ioctl, which is a big
no-go. This was attempted to address off-list in the original bugfix,
and amd QA people claimed the bug was fixed now. Very clearly that's not
the case. Here's my attempt to sort this out:
- Rename the local variable to new_handle, the old aliasing with
args->handle is just too dangerously confusing.
- Merge the gem obj lookup with the two-stage idr_replace so that we
avoid getting ourselves confused there.
- This means we don't have a surplus temporary reference anymore, only
an inherited from the idr. A concurrent gem_close on the new_handle
could steal that. Fix that with the same two-stage approach
create_tail uses. This is a bit overkill as documented in the comment,
but I also don't trust my ability to understand this all correctly, so
go with the established pattern we have from other ioctls instead for
maximum paranoia.
- Adjust error paths. I've tried to make the error and success paths
common, because they are identical except for which handle is removed
and on which we call idr_replace to (re)install the object again. But
that made things messier to read, so I've left it at the more verbose
version, which unfortunately hides the symmetry in the entire code
flow a bit.
- While at it, also replace the 7 space indent with 1 tab.
And finally, because I flat out don't trust my abilities here at all
anymore:
- Disable the ioctl until we have the igt situation and everything else
sorted out on-list and with full consensus.
v2:
Sashiko noticed that I didn't handle the error path for idr_replace
correctly, it must be checked with IS_ERR_OR_NULL like in
gem_handle_delete. So yeah, definitely should just the existing paths
1:1 because this is endless amounts of tricky.
Also add the Fixes: line for the original ioctl, I forgot that too.
Severity
CWE
- CWE-367 - Time-of-check Time-of-use (TOCTOU) Race Condition
Assigner
References
6 references
| URL | Tags |
|---|---|
| https://git.kernel.org/stable/c/c0639ede2f24ac224… | |
| https://git.kernel.org/stable/c/1d9b93df7fc768228… | |
| https://git.kernel.org/stable/c/1a4f03d22fb655e5f… | |
| https://access.redhat.com/security/cve/CVE-2026-53145 | vdb-entryx_refsource_REDHAT |
| https://bugzilla.redhat.com/show_bug.cgi?id=2492773 | issue-trackingx_refsource_REDHAT |
| https://security.access.redhat.com/data/csaf/v2/v… | x_sadp-csaf-vex |
Impacted products
7 products
| Vendor | Product | Version | |
|---|---|---|---|
| Linux | Linux |
Affected:
672464dd53231509c9c771110798c56d4660e19e , < c0639ede2f24ac224b2079cd35ecd5fd8ad4e3cd
(git)
Affected: 61bd96d3e5472c253f9c1ab77608f0c8aaa9d025 , < 1d9b93df7fc768228906e24220591ec1cddad391 (git) Affected: 5e28b7b94408897e41c63477aabc9e1db439bc8c , < 1a4f03d22fb655e5f192244fb2c87d8066fcfca2 (git) Affected: 318b995cffcfcaa69a234d28123a3f4ae186a9df (git) Affected: 38f12d0e10d83b66fa1466400d876a3a8da31542 (git) Affected: 0dfa42cfe4dbe114533480503934f43e33c1e83d (git) Affected: cde2c9257cbe8463b9dcf7b1075177b72b5fd938 (git) |
|
| Linux | Linux |
Affected:
6.18.32 , < 6.18.36
(semver)
Affected: 7.0.9 , < 7.0.13 (semver) |
|
| Red Hat | Red Hat Enterprise Linux 10 |
cpe:/o:redhat:enterprise_linux:10
|
|
| Red Hat | Red Hat Enterprise Linux 6 |
cpe:/o:redhat:enterprise_linux:6
|
|
| Red Hat | Red Hat Enterprise Linux 7 |
cpe:/o:redhat:enterprise_linux:7
|
|
| Red Hat | Red Hat Enterprise Linux 8 |
cpe:/o:redhat:enterprise_linux:8
|
|
| Red Hat | Red Hat Enterprise Linux 9 |
cpe:/o:redhat:enterprise_linux:9
|
{
"containers": {
"adp": [
{
"affected": [
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:10"
],
"defaultStatus": "affected",
"packageName": "kernel",
"product": "Red Hat Enterprise Linux 10",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:6"
],
"defaultStatus": "unknown",
"packageName": "kernel",
"product": "Red Hat Enterprise Linux 6",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:7"
],
"defaultStatus": "affected",
"packageName": "kernel",
"product": "Red Hat Enterprise Linux 7",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:7"
],
"defaultStatus": "affected",
"packageName": "kernel-rt",
"product": "Red Hat Enterprise Linux 7",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:8"
],
"defaultStatus": "affected",
"packageName": "kernel",
"product": "Red Hat Enterprise Linux 8",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:8"
],
"defaultStatus": "affected",
"packageName": "kernel-rt",
"product": "Red Hat Enterprise Linux 8",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:9"
],
"defaultStatus": "affected",
"packageName": "kernel",
"product": "Red Hat Enterprise Linux 9",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/o:redhat:enterprise_linux:9"
],
"defaultStatus": "affected",
"packageName": "kernel-rt",
"product": "Red Hat Enterprise Linux 9",
"vendor": "Red Hat"
}
],
"datePublic": "2026-06-25T00:00:00.000Z",
"descriptions": [
{
"lang": "en",
"value": "A flaw was found in the Linux kernel\u0027s Direct Rendering Manager (DRM) Graphics Execution Manager (GEM) subsystem. A race condition exists within the `change_handle` ioctl between `gem_close` and `gem_change_handle` operations. This could lead to incorrect handling of graphics memory, potentially resulting in system instability or unexpected behavior. The `change_handle` ioctl has been temporarily disabled to mitigate this issue."
}
],
"metrics": [
{
"other": {
"content": {
"namespace": "https://access.redhat.com/security/updates/classification/",
"value": "Important"
},
"type": "Red Hat severity rating"
}
},
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "LOCAL",
"availabilityImpact": "HIGH",
"baseScore": 7,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-367",
"description": "Time-of-check Time-of-use (TOCTOU) Race Condition",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-07-15T00:44:51.168Z",
"orgId": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"shortName": "redhat-SADP"
},
"references": [
{
"tags": [
"vdb-entry",
"x_refsource_REDHAT"
],
"url": "https://access.redhat.com/security/cve/CVE-2026-53145"
},
{
"name": "RHBZ#2492773",
"tags": [
"issue-tracking",
"x_refsource_REDHAT"
],
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2492773"
},
{
"tags": [
"x_sadp-csaf-vex"
],
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-53145.json"
}
],
"timeline": [
{
"lang": "en",
"time": "2026-06-25T00:00:00.000Z",
"value": "Reported to Red Hat."
},
{
"lang": "en",
"time": "2026-06-25T00:00:00.000Z",
"value": "Made public."
}
],
"title": "kernel: drm/gem: Try to fix change_handle ioctl, attempt 4",
"x_adpType": "supplier",
"x_generator": {
"engine": "sadp-cli 1.0.0"
}
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/gpu/drm/drm_gem.c",
"drivers/gpu/drm/drm_ioctl.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "c0639ede2f24ac224b2079cd35ecd5fd8ad4e3cd",
"status": "affected",
"version": "672464dd53231509c9c771110798c56d4660e19e",
"versionType": "git"
},
{
"lessThan": "1d9b93df7fc768228906e24220591ec1cddad391",
"status": "affected",
"version": "61bd96d3e5472c253f9c1ab77608f0c8aaa9d025",
"versionType": "git"
},
{
"lessThan": "1a4f03d22fb655e5f192244fb2c87d8066fcfca2",
"status": "affected",
"version": "5e28b7b94408897e41c63477aabc9e1db439bc8c",
"versionType": "git"
},
{
"status": "affected",
"version": "318b995cffcfcaa69a234d28123a3f4ae186a9df",
"versionType": "git"
},
{
"status": "affected",
"version": "38f12d0e10d83b66fa1466400d876a3a8da31542",
"versionType": "git"
},
{
"status": "affected",
"version": "0dfa42cfe4dbe114533480503934f43e33c1e83d",
"versionType": "git"
},
{
"status": "affected",
"version": "cde2c9257cbe8463b9dcf7b1075177b72b5fd938",
"versionType": "git"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/gpu/drm/drm_gem.c",
"drivers/gpu/drm/drm_ioctl.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "6.18.36",
"status": "affected",
"version": "6.18.32",
"versionType": "semver"
},
{
"lessThan": "7.0.13",
"status": "affected",
"version": "7.0.9",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.36",
"versionStartIncluding": "6.18.32",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.0.13",
"versionStartIncluding": "7.0.9",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/gem: Try to fix change_handle ioctl, attempt 4\n\n[airlied: just added some comments on how to reenable]\nOn-list because the cat is out of the bag and we\u0027re clearly not good\nenough to figure this out in private. The story thus far:\n\n5e28b7b94408 (\"drm: Set old handle to NULL before prime swap in\nchange_handle\") tried to fix a race condition between the gem_close and\ngem_change_handle ioctls, but got a few things wrong:\n\n- There\u0027s a confusion with the local variable handle, which is actually\n the new handle, and so the two-stage trick was actually applied to the\n wrong idr slot. 7164d78559b0 (\"drm/gem: fix race between\n change_handle and handle_delete\") tried to fix that by adding yet\n another code block, but forgot to add the error handling. Which meant\n we now have two paths, both kinda wrong.\n\n- dc366607c41c (\"drm: Replace old pointer to new idr\") tried to apply\n another fix, but inconsistently, again because of the handle confusion\n - this would be the right fix (kinda, somewhat, it\u0027s a mess) if we\u0027d\n do the two-stage approach for the new handle. Except that wasn\u0027t the\n intent of the original fix.\n\nWe also didn\u0027t have an igt merged for the original ioctl, which is a big\nno-go. This was attempted to address off-list in the original bugfix,\nand amd QA people claimed the bug was fixed now. Very clearly that\u0027s not\nthe case. Here\u0027s my attempt to sort this out:\n\n- Rename the local variable to new_handle, the old aliasing with\n args-\u003ehandle is just too dangerously confusing.\n\n- Merge the gem obj lookup with the two-stage idr_replace so that we\n avoid getting ourselves confused there.\n\n- This means we don\u0027t have a surplus temporary reference anymore, only\n an inherited from the idr. A concurrent gem_close on the new_handle\n could steal that. Fix that with the same two-stage approach\n create_tail uses. This is a bit overkill as documented in the comment,\n but I also don\u0027t trust my ability to understand this all correctly, so\n go with the established pattern we have from other ioctls instead for\n maximum paranoia.\n\n- Adjust error paths. I\u0027ve tried to make the error and success paths\n common, because they are identical except for which handle is removed\n and on which we call idr_replace to (re)install the object again. But\n that made things messier to read, so I\u0027ve left it at the more verbose\n version, which unfortunately hides the symmetry in the entire code\n flow a bit.\n\n- While at it, also replace the 7 space indent with 1 tab.\n\nAnd finally, because I flat out don\u0027t trust my abilities here at all\nanymore:\n\n- Disable the ioctl until we have the igt situation and everything else\n sorted out on-list and with full consensus.\n\nv2:\n\nSashiko noticed that I didn\u0027t handle the error path for idr_replace\ncorrectly, it must be checked with IS_ERR_OR_NULL like in\ngem_handle_delete. So yeah, definitely should just the existing paths\n1:1 because this is endless amounts of tricky.\n\nAlso add the Fixes: line for the original ioctl, I forgot that too."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.8,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The vulnerable code is reached through the local DRM core ioctl DRM_IOCTL_GEM_CHANGE_HANDLE on a DRM device file, not through network or physical input. Render nodes expose this ioctl path to local userspace.\nAC:L - The bug is a race between GEM_CHANGE_HANDLE and GEM_CLOSE on attacker-controlled handles, and the attacker can drive both sides with concurrent ioctl calls. Repetition and handle selection are under attacker control.\nPR:L - The ioctl was registered with DRM_RENDER_ALLOW, so it does not require DRM master, authentication, or CAP_SYS_ADMIN on a render node. It requires local unprivileged access to the DRM device file.\nUI:N - No victim action is required after the attacker has local execution and device access. The attacker triggers the race directly with ioctl calls.\nS:U - The impact remains within the kernel security authority of the same host. This is not a VM escape, IOMMU bypass, or cross-scope boundary violation.\nC:H - The race can leave a dangling GEM object pointer in the per-file IDR, producing a use-after-free. Under the required kernel guidance, UAF memory corruption is scored as high confidentiality impact.\nI:H - The dangling drm_gem_object can be reused and later dereferenced through driver callbacks, making function pointer hijack or arbitrary kernel write/code execution defensible. Under the required kernel guidance, UAF is high integrity impact.\nA:H - The UAF and handle-count corruption can trigger kernel warnings, crashes, or panics through later GEM close/lookup paths. Kernel crash availability impact is high."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-05T12:33:28.496Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/c0639ede2f24ac224b2079cd35ecd5fd8ad4e3cd"
},
{
"url": "https://git.kernel.org/stable/c/1d9b93df7fc768228906e24220591ec1cddad391"
},
{
"url": "https://git.kernel.org/stable/c/1a4f03d22fb655e5f192244fb2c87d8066fcfca2"
}
],
"title": "drm/gem: Try to fix change_handle ioctl, attempt 4",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-53145",
"datePublished": "2026-06-25T08:38:32.228Z",
"dateReserved": "2026-06-09T07:44:35.387Z",
"dateUpdated": "2026-08-05T12:33:28.496Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
Loading…
Trend slope:
-
(linear fit over daily sighting counts)
Show additional events:
Loading…
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Loading…
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.
Loading…
Loading…