DEBIAN-CVE-2024-39486

Source
https://security-tracker.debian.org/tracker/CVE-2024-39486
Import Source
https://storage.googleapis.com/osv-test-debian-osv/debian-cve-osv/DEBIAN-CVE-2024-39486.json
JSON Data
https://api.test.osv.dev/v1/vulns/DEBIAN-CVE-2024-39486
Upstream
Published
2024-07-06T10:15:03Z
Modified
2025-09-25T22:40:35Z
Severity
  • 7.0 (High) CVSS_V3 - CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H CVSS Calculator
Summary
[none]
Details

In the Linux kernel, the following vulnerability has been resolved: drm/drmfile: Fix pid refcounting race maarten.lankhorst@linux.intel.com, Maxime Ripard mripard@kernel.org, Thomas Zimmermann tzimmermann@suse.de filp->pid is supposed to be a refcounted pointer; however, before this patch, drmfileupdatepid() only increments the refcount of a struct pid after storing a pointer to it in filp->pid and dropping the dev->filelistmutex, making the following race possible: process A process B ========= ========= begin drmfileupdatepid mutexlock(&dev->filelistmutex) rcureplacepointer(filp->pid, <pid B>, 1) mutexunlock(&dev->filelistmutex) begin drmfileupdatepid mutexlock(&dev->filelistmutex) rcureplacepointer(filp->pid, <pid A>, 1) mutexunlock(&dev->filelistmutex) getpid(<pid A>) synchronizercu() putpid(<pid B>) * pid B reaches refcount 0 and is freed here get_pid(<pid B>) UAF * synchronizercu() putpid(<pid A>) As far as I know, this race can only occur with CONFIGPREEMPTRCU=y because it requires RCU to detect a quiescent state in code that is not explicitly calling into the scheduler. This race leads to use-after-free of a "struct pid". It is probably somewhat hard to hit because process A has to pass through a synchronizercu() operation while process B is between mutexunlock() and getpid(). Fix it by ensuring that by the time a pointer to the current task's pid is stored in the file, an extra reference to the pid has been taken. This fix also removes the condition for synchronizercu(); I think that optimization is unnecessary complexity, since in that case we would usually have bailed out on the lockless check above.

References

Affected packages

Debian:13 / linux

Package

Name
linux
Purl
pkg:deb/debian/linux?arch=source

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0Unknown introduced version / All previous versions are affected
Fixed
6.9.8-1

Ecosystem specific

{
    "urgency": "not yet assigned"
}

Debian:14 / linux

Package

Name
linux
Purl
pkg:deb/debian/linux?arch=source

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0Unknown introduced version / All previous versions are affected
Fixed
6.9.8-1

Ecosystem specific

{
    "urgency": "not yet assigned"
}