uio: Fix stale info pointer in failed registration path
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 4.15, 5.10.270, 5.15.221, 6.1.188, 6.6.157, and 3 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: uio: Fix stale info pointer in failed registration path After device_add(), the UIO device is visible to userspace and /dev/uioX can be opened. If a later setup step fails, __uio_register_device() unwinds the device but leaves idev->info pointing at the caller-owned struct uio_info. That is unsafe when an opener races with the failed registration path. The open file keeps a reference to the uio_device, while the caller sees registration failure and may free its struct uio_info. Later file operations can then follow idev->info and dereference freed memory. Handle post-device_add() failures like unregister: remove UIO attributes while the info pointer is still valid, then clear idev->info under info_lock and wake existing waiters/async users before removing the device and minor. This makes already-open file descriptors observe the same "device gone" state as normal uio_unregister_device().
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in 63eaa7663335d482a8825c231213e312cacea567; From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in df4faf65194ec6c315a59be4c6749eaeb3009243; From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in 506b43dde5f9ac0068b1360e6b5dbee07fda59fb; From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in 15340b00e665af805523b08515294a1aa1778151; From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in 234156f6c6d9ec35dc47abbcc3adc3c79fc6a5ac; From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in 16695e9059d80ea6661e8399064b0c01f641dd8c; From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in ec5bd6731183eb6f619140c9bef2ee11ed818c20; From a93e7b331568227500186a465fee3c2cb5dffd1f · fixed in 67b6fc084b034a91c3ec7907a3fed89a2450f30b; From 4.14.100 · fixed in 4.15
- Linux Linux
4.18
- KernelLinux
From 4.18.0 · fixed in 5.10.270; From 5.11.0 · fixed in 5.15.221; From 5.16.0 · fixed in 6.1.188; From 6.2.0 · fixed in 6.6.157; From 6.7.0 · fixed in 6.12.110; From 6.13.0 · fixed in 6.18.52; From 6.19.0 · fixed in 7.2.6
References 8
git.kernel.org
- stable/c/63eaa7663335d482a8825c231213e312cacea567
- stable/c/df4faf65194ec6c315a59be4c6749eaeb3009243
- stable/c/506b43dde5f9ac0068b1360e6b5dbee07fda59fb
- stable/c/15340b00e665af805523b08515294a1aa1778151
- stable/c/234156f6c6d9ec35dc47abbcc3adc3c79fc6a5ac
- stable/c/16695e9059d80ea6661e8399064b0c01f641dd8c
- stable/c/ec5bd6731183eb6f619140c9bef2ee11ed818c20
- stable/c/67b6fc084b034a91c3ec7907a3fed89a2450f30b