CVE-2026-93054 in Linuxinfo

Summary

by MITRE • 09/17/2026

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().

Once again VulDB remains the best source for vulnerability data.

Analysis

by VulDB Data Team • 09/17/2026

The vulnerability identified in the Linux kernel's UIO subsystem represents a critical race condition arising from improper resource management during device registration failures. The User Space I/O framework allows user-space applications to interact directly with hardware devices through character device nodes, typically located at /dev/uioX. Under normal operational circumstances, the lifecycle of these devices is managed by ensuring that all references are properly released before memory structures are freed. However, a flaw in the error handling path within __uio_register_device() creates a window where kernel memory safety guarantees are violated. Specifically, after the device has been added to the system and made visible to userspace via device_add(), subsequent setup steps may fail due to configuration errors or resource unavailability. In such scenarios, the function attempts to unwind the registration process but fails to correctly manage the pointer to the underlying uio_info structure held by the kernel-side uio_device object.

The core technical flaw lies in the timing of when the idev->info pointer is cleared relative to the potential freeing of the caller-owned struct uio_info. When a setup step fails after device_add(), the UIO device remains registered and accessible, meaning user-space processes can open the associated character device node. Opening this device increments the reference count on the uio_device structure, keeping it alive in memory even if the registration process subsequently aborts. The bug occurs because the cleanup routine does not immediately nullify the idev->info pointer while holding the necessary locks to prevent concurrent access. Consequently, if a user-space application opens the device concurrently with this failed registration path, the file descriptor retains a valid reference to the uio_device. Meanwhile, the kernel code handling the failure proceeds to free the struct uio_info because it assumes the caller no longer needs it due to the reported error. This creates a dangling pointer scenario where idev->info still points to memory that has been returned to the allocator or overwritten by other allocations.

This race condition leads directly to use-after-free vulnerabilities, which can result in kernel crashes, data corruption, or potentially arbitrary code execution depending on how an attacker manipulates the freed memory region. When file operations are subsequently performed on the open file descriptor, the kernel attempts to dereference idev->info to access device-specific information and callbacks. Since this pointer now references freed memory, the operation accesses invalid addresses, triggering a general protection fault or allowing exploitation of heap metadata if the attacker controls the contents of the reclaimed slab cache. This is particularly dangerous because it requires no special privileges beyond opening the device node, which may be accessible to unprivileged users depending on system configuration and permissions settings for /dev/uioX devices.

From a classification perspective, this vulnerability aligns with CWE-416, Use After Free, as the kernel continues to utilize a pointer after its memory has been deallocated. It also relates to CWE-362, Concurrent Execution using Shared Resource with Improper Synchronization, due to the race between the registration failure cleanup and user-space file operations. In terms of adversarial tactics, this flaw could be leveraged within ATT&CK technique T1059, Command and Scripting Interpreter, or more broadly in privilege escalation scenarios where a local attacker exploits kernel memory corruption to gain higher privileges on the system. The lack of proper synchronization during the critical window between device visibility and registration failure completion is the primary enabler for this exploit vector.

The resolution implemented addresses these issues by ensuring that post-device_add() failures are handled with the same rigor as explicit unregistration requests. The fix mandates that UIO attributes be removed while the info pointer remains valid, preventing new accesses from proceeding without proper checks. Crucially, the idev->info pointer is cleared under the protection of info_lock before any device removal or minor number release occurs. This synchronization ensures that existing waiters and asynchronous users are woken up with a clear indication that the device has been removed, mirroring the behavior of normal uio_unregister_device() calls. By enforcing this sequence, the kernel guarantees that open file descriptors observe a consistent state where the device is no longer available for operations, thereby eliminating the race condition and preventing access to freed memory structures.

To mitigate similar risks in broader system administration contexts, it is advisable to restrict permissions on /dev/uioX devices to only those users or groups requiring direct hardware access. Regular kernel updates should be applied promptly as this vulnerability has been resolved in upstream Linux kernels. For developers integrating UIO drivers, strict adherence to the proper initialization and cleanup sequences provided by the framework is essential, ensuring that error paths always result in complete state teardown before returning control to the caller. Monitoring system logs for unexpected crashes or oops messages related to uio devices can also serve as an early detection mechanism for exploitation attempts of this class of vulnerabilities.

Responsible

Linux

Reservation

09/17/2026

Disclosure

09/17/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Want to know what is going to be exploited?

We predict KEV entries!