{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-68181","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2025-12-16T13:41:40.252Z","datePublished":"2025-12-16T13:42:59.600Z","dateUpdated":"2026-08-05T12:10:04.239Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T12:10:04.239Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/radeon: Remove calls to drm_put_dev()\n\nSince the allocation of the drivers main structure was changed to\ndevm_drm_dev_alloc() drm_put_dev()'ing to trigger it to be free'd\nshould be done by devres.\n\nHowever, drm_put_dev() is still in the probe error and device remove\npaths. When the driver fails to probe warnings like the following are\nshown because devres is trying to drm_put_dev() after the driver\nalready did it.\n\n[    5.642230] radeon 0000:01:05.0: probe with driver radeon failed with error -22\n[    5.649605] ------------[ cut here ]------------\n[    5.649607] refcount_t: underflow; use-after-free.\n[    5.649620] WARNING: CPU: 0 PID: 357 at lib/refcount.c:28 refcount_warn_saturate+0xbe/0x110\n\n(cherry picked from commit 3eb8c0b4c091da0a623ade0d3ee7aa4a93df1ea4)"}],"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 object is the radeon `drm_device`/`radeon_device` reached through local device nodes (`/dev/dri/card*`, `/dev/dri/renderD*`) and local driver bind/unbind/module teardown; there is no network-facing path into radeon_drv.c.\nAC:L - The double `drm_dev_put()` is unconditional on both the probe-error and `.remove` paths — no race to win and no memory layout the attacker cannot influence, and the attacker chooses when to touch the stale fd, giving an unbounded free-to-use window for heap grooming.\nPR:L - radeon declares `DRIVER_RENDER`, so any unprivileged local user can open the world-accessible render node and hold the `drm_dev_get()` reference whose premature release frees the object under their still-open fd, after which their own `ioctl`/`mmap`/`close` drives the use-after-free.\nUI:N - No victim action is needed — the attacker's own open fd plus a routine driver teardown (unbind, module reload, hot-unplug, or shutdown in a VM) is sufficient, and the freed object is then touched by the attacker's own syscalls.\nS:U - The corruption is confined to kernel heap memory within the same security authority; there is no VM, IOMMU, or sandbox boundary crossed.\nC:H - The freed `radeon_device` container can be reclaimed by attacker-sprayed data and is then read back through `drm_ioctl()`/`dev->driver` and radeon's ioctl and postclose paths, yielding an arbitrary kernel-memory read primitive.\nI:H - `refcount_dec_and_test()` writes into freed memory, and `radeon_driver_postclose_kms()` writes `rdev->hyperz_filp`/`cmask_filp` and manipulates mutexes and VM state in the freed object, giving a write primitive and function-pointer control suitable for privilege escalation.\nA:H - The bug reliably produces a refcount underflow WARN and use-after-free on driver probe failure and on every device removal, causing kernel oops/panic and GPU subsystem failure."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/gpu/drm/radeon/radeon_drv.c"],"versions":[{"version":"a9ed2f052c5c14e4be58c5ec8794dffc87588123","lessThan":"2fa41445d8c98f2a65503c373796466496edc0e7","status":"affected","versionType":"git"},{"version":"a9ed2f052c5c14e4be58c5ec8794dffc87588123","lessThan":"ec18f6b2c743cc471b2539ddb5caed20a012e640","status":"affected","versionType":"git"},{"version":"a9ed2f052c5c14e4be58c5ec8794dffc87588123","lessThan":"745bae76acdd71709773c129a69deca01036250b","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/radeon/radeon_drv.c"],"versions":[{"version":"6.12","status":"affected"},{"version":"0","lessThan":"6.12","status":"unaffected","versionType":"semver"},{"version":"6.12.58","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.17.8","lessThanOrEqual":"6.17.*","status":"unaffected","versionType":"semver"},{"version":"6.18","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.12","versionEndExcluding":"6.12.58"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.12","versionEndExcluding":"6.17.8"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.12","versionEndExcluding":"6.18"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/2fa41445d8c98f2a65503c373796466496edc0e7"},{"url":"https://git.kernel.org/stable/c/ec18f6b2c743cc471b2539ddb5caed20a012e640"},{"url":"https://git.kernel.org/stable/c/745bae76acdd71709773c129a69deca01036250b"}],"title":"drm/radeon: Remove calls to drm_put_dev()","x_generator":{"engine":"bippy-1.2.0"}}}}