{"api_version":"1","generated_at":"2026-10-06T22:08:08+00:00","cve":"CVE-2026-89823","urls":{"html":"https://cve.report/CVE-2026-89823","api":"https://cve.report/api/cve/CVE-2026-89823.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-89823","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-89823"},"summary":{"title":"drm: fix race between partial drm_dev_register() failure and ioctl","description":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm: fix race between partial drm_dev_register() failure and ioctl\n\nIf drm_dev_register() fails after registering a minor (e.g. render minor\nregistered, primary minor fails), userspace could have opened the first\nminor and entered a drm_dev_enter() critical section. Since the\nunplugged flag was never set, the ioctl proceeds while the error path\ntears down device resources.\n\nFix this by introducing drm_dev_synchronize_unplug(), which sets the\nunplugged flag and waits for the SRCU barrier, ensuring all in-flight\ndrm_dev_enter() critical sections complete before cleanup proceeds; call\nit on the error path of drm_dev_register().","state":"PUBLISHED","assigner":"Linux","published_at":"2026-09-16 11:16:48","updated_at":"2026-09-16 15:18:11"},"problem_types":[],"metrics":[{"version":"3.1","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"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"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"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"}}],"references":[{"url":"https://git.kernel.org/stable/c/2d1215a72159d00001e08dee162e27718934bee9","name":"https://git.kernel.org/stable/c/2d1215a72159d00001e08dee162e27718934bee9","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/26d9162213952927cd59c0d94b7e0e992b347bec","name":"https://git.kernel.org/stable/c/26d9162213952927cd59c0d94b7e0e992b347bec","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/19dbfe4d586aecfed121cb3fa62281761d9d341f","name":"https://git.kernel.org/stable/c/19dbfe4d586aecfed121cb3fa62281761d9d341f","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/6729990df9e70623bf53f855b521ae71ca9cb278","name":"https://git.kernel.org/stable/c/6729990df9e70623bf53f855b521ae71ca9cb278","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/79d09cfe90304ff4f195e47d569800f5e0f8b854","name":"https://git.kernel.org/stable/c/79d09cfe90304ff4f195e47d569800f5e0f8b854","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/a0a7e2e177f2f18b9e7318a4c64ac44efd9ef22c","name":"https://git.kernel.org/stable/c/a0a7e2e177f2f18b9e7318a4c64ac44efd9ef22c","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/eb197f7d60f00d0f5b1b3505dfc86a7e36045a3e","name":"https://git.kernel.org/stable/c/eb197f7d60f00d0f5b1b3505dfc86a7e36045a3e","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/24d28d15c0f7f7d4a1c229f8730314f0f8758810","name":"https://git.kernel.org/stable/c/24d28d15c0f7f7d4a1c229f8730314f0f8758810","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-89823","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-89823","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 26d9162213952927cd59c0d94b7e0e992b347bec git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 24d28d15c0f7f7d4a1c229f8730314f0f8758810 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 6729990df9e70623bf53f855b521ae71ca9cb278 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 a0a7e2e177f2f18b9e7318a4c64ac44efd9ef22c git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 19dbfe4d586aecfed121cb3fa62281761d9d341f git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 79d09cfe90304ff4f195e47d569800f5e0f8b854 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 2d1215a72159d00001e08dee162e27718934bee9 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected bee330f3d67273a68dcb99f59480d59553c008b2 eb197f7d60f00d0f5b1b3505dfc86a7e36045a3e git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 4.18","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 4.18 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 5.10.270 5.10.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 5.15.221 5.15.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.1.188 6.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.6.157 6.6.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.110 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.51 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.5 7.2.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.3-rc1 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["drivers/gpu/drm/drm_drv.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"26d9162213952927cd59c0d94b7e0e992b347bec","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"},{"lessThan":"24d28d15c0f7f7d4a1c229f8730314f0f8758810","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"},{"lessThan":"6729990df9e70623bf53f855b521ae71ca9cb278","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"},{"lessThan":"a0a7e2e177f2f18b9e7318a4c64ac44efd9ef22c","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"},{"lessThan":"19dbfe4d586aecfed121cb3fa62281761d9d341f","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"},{"lessThan":"79d09cfe90304ff4f195e47d569800f5e0f8b854","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"},{"lessThan":"2d1215a72159d00001e08dee162e27718934bee9","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"},{"lessThan":"eb197f7d60f00d0f5b1b3505dfc86a7e36045a3e","status":"affected","version":"bee330f3d67273a68dcb99f59480d59553c008b2","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["drivers/gpu/drm/drm_drv.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"4.18"},{"lessThan":"4.18","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"5.10.*","status":"unaffected","version":"5.10.270","versionType":"semver"},{"lessThanOrEqual":"5.15.*","status":"unaffected","version":"5.15.221","versionType":"semver"},{"lessThanOrEqual":"6.1.*","status":"unaffected","version":"6.1.188","versionType":"semver"},{"lessThanOrEqual":"6.6.*","status":"unaffected","version":"6.6.157","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.110","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.51","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.5","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.3-rc1","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"5.10.270","versionStartIncluding":"4.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"5.15.221","versionStartIncluding":"4.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.1.188","versionStartIncluding":"4.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.6.157","versionStartIncluding":"4.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.110","versionStartIncluding":"4.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.51","versionStartIncluding":"4.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2.5","versionStartIncluding":"4.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.3-rc1","versionStartIncluding":"4.18","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm: fix race between partial drm_dev_register() failure and ioctl\n\nIf drm_dev_register() fails after registering a minor (e.g. render minor\nregistered, primary minor fails), userspace could have opened the first\nminor and entered a drm_dev_enter() critical section. Since the\nunplugged flag was never set, the ioctl proceeds while the error path\ntears down device resources.\n\nFix this by introducing drm_dev_synchronize_unplug(), which sets the\nunplugged flag and waits for the SRCU barrier, ensuring all in-flight\ndrm_dev_enter() critical sections complete before cleanup proceeds; call\nit on the error path of drm_dev_register()."}],"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 race is entered by opening a newly published DRM minor (/dev/dri/renderD* or card*) and issuing ioctl/mmap into drm_dev_enter(); that is a local char-dev syscall path, not network, adjacent-radio, or USB packet processing.\nAC:L - The attacker controls the userspace side (inotify on the new node, open, concurrent DRM_RENDER_ALLOW ioctl/mmap) and can force later drm_dev_register() steps to fail after the first minor is live (ENOMEM in create_compat_control_link or drm_modeset_register_all). Modern drivers skip drm_global_mutex, so open is not serialized with register.\nPR:L - The commit's example publishes the render minor first; that node has no CAP_SYS_ADMIN check, and the overlapping ioctls are DRM_RENDER_ALLOW. Unprivileged local users on phones, desktops, and GPU VMs routinely open /dev/dri/renderD*.\nUI:N - The attacker opens their own DRM fd and issues ioctls; GPU or hotplug display probe runs in kernel driver init and does not require a victim to mount media or open a file.\nS:U - The use-after-free is of host-kernel DRM/driver resources that drm_dev_enter() is meant to protect, remaining in the same kernel authority; this is not a VM escape or IOMMU/DMA bypass.\nC:H - On drm_dev_register() error, probe rollback frees devm MMIO and driver objects while an in-flight drm_dev_enter() ioctl/mmap still uses them, a use-after-free that enables kernel memory disclosure.\nI:H - The same use-after-free of driver state during concurrent ioctl/mmap allows heap spraying, arbitrary writes, and control-flow hijack, matching kernel guidance that UAF is Integrity High.\nA:H - Racing ioctl/mmap against probe teardown oopses or panics via stale mappings or freed objects; a use-after-free also crashes when not fully exploited."}]}],"providerMetadata":{"dateUpdated":"2026-09-16T14:39:02.220Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/26d9162213952927cd59c0d94b7e0e992b347bec"},{"url":"https://git.kernel.org/stable/c/24d28d15c0f7f7d4a1c229f8730314f0f8758810"},{"url":"https://git.kernel.org/stable/c/6729990df9e70623bf53f855b521ae71ca9cb278"},{"url":"https://git.kernel.org/stable/c/a0a7e2e177f2f18b9e7318a4c64ac44efd9ef22c"},{"url":"https://git.kernel.org/stable/c/19dbfe4d586aecfed121cb3fa62281761d9d341f"},{"url":"https://git.kernel.org/stable/c/79d09cfe90304ff4f195e47d569800f5e0f8b854"},{"url":"https://git.kernel.org/stable/c/2d1215a72159d00001e08dee162e27718934bee9"},{"url":"https://git.kernel.org/stable/c/eb197f7d60f00d0f5b1b3505dfc86a7e36045a3e"}],"title":"drm: fix race between partial drm_dev_register() failure and ioctl","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-89823","datePublished":"2026-09-16T10:30:55.534Z","dateReserved":"2026-09-11T19:38:34.768Z","dateUpdated":"2026-09-16T14:39:02.220Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-09-16 11:16:48","lastModifiedDate":"2026-09-16 15:18:11","problem_types":[],"metrics":{"cvssMetricV31":[{"source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","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}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"89823","Ordinal":"1","Title":"drm: fix race between partial drm_dev_register() failure and ioc","CVE":"CVE-2026-89823","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"89823","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm: fix race between partial drm_dev_register() failure and ioctl\n\nIf drm_dev_register() fails after registering a minor (e.g. render minor\nregistered, primary minor fails), userspace could have opened the first\nminor and entered a drm_dev_enter() critical section. Since the\nunplugged flag was never set, the ioctl proceeds while the error path\ntears down device resources.\n\nFix this by introducing drm_dev_synchronize_unplug(), which sets the\nunplugged flag and waits for the SRCU barrier, ensuring all in-flight\ndrm_dev_enter() critical sections complete before cleanup proceeds; call\nit on the error path of drm_dev_register().","Type":"Description","Title":"drm: fix race between partial drm_dev_register() failure and ioc"}]}}}