CVE-2026-99203 in Linuxinfo

Summary

by MITRE • 10/28/2026

In the Linux kernel, the following vulnerability has been resolved:

pipe: preserve existing fasync readers on writer setup failure

F_SETFL and FIOASYNC decide whether to invoke ->fasync() before pipe_fasync() takes pipe->mutex. Two enables of one O_RDWR FIFO can therefore both enter the callback.

fasync_helper() allocates before checking for an existing entry. If the first enable installs both entries, a second enable can update the reader entry and then fail the allocation for the writer entry. The error path removes the pre-existing reader entry, clearing FASYNC while the writer entry remains registered. __fput() then skips ->fasync(), so a later pipe notification can dereference the freed file or its f_owner. An unprivileged memory-pressure reproducer triggers a KASAN slab-use-after-free in send_sigio() through this path.

Keep the reader helper's result and undo the registration only if this call added it. The pipe mutex serializes changes to both lists, so a failed new registration still removes its reader, while a failed duplicate preserves the existing registrations and FASYNC. Successful duplicate enables continue to update fa_fd as before.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 10/28/2026

The Linux kernel contains a concurrency vulnerability within the named pipe implementation that leads to use-after-free conditions when handling asynchronous I/O notifications on read-write FIFOs. The core issue stems from improper synchronization during file status flag modifications, specifically involving F_SETFL and FIOASYNC ioctls or system calls. When these operations are invoked concurrently on an O_RDWR FIFO, they race against each other before the pipe_fasync function acquires the necessary mutex lock to serialize access to internal data structures. This lack of atomicity allows multiple execution paths to enter the fasync callback simultaneously, creating a window where state consistency is compromised and memory management logic fails to account for concurrent modifications correctly.

The technical flaw manifests in how the kernel handles the allocation and registration of file asynchronous notification entries via fasync_helper. In this process, memory is allocated before verifying whether an existing entry already exists for the specific direction or role within the pipe structure. If one thread successfully installs both reader and writer async entries while a second concurrent thread attempts to update the reader entry but fails during its own allocation phase due to resource constraints or race conditions, the error handling path becomes critical. The flawed logic in this error path removes the pre-existing reader entry from the notification list, effectively clearing the FASYNC flag for that direction. However, because of the race condition, the writer entry remains registered and active despite the overall operation failing or being inconsistent. This leaves the kernel with a dangling pointer situation where one part of the pipe structure references freed memory while another part still attempts to use it.

The operational impact of this vulnerability is severe, as demonstrated by unprivileged users triggering a KASAN slab-use-after-free error in send_sigio(). When subsequent asynchronous notifications are generated for the pipe, the kernel may attempt to dereference file structures or f_owner pointers that have already been freed due to the inconsistent state described above. This can lead to kernel crashes, denial of service conditions where system stability is compromised, and potentially arbitrary code execution if an attacker can carefully craft memory pressure scenarios to exploit this race condition repeatedly. The vulnerability affects systems relying on named pipes for inter-process communication with asynchronous notification requirements, particularly in environments where multiple processes frequently modify file status flags concurrently.

Mitigation strategies involve applying the upstream kernel patch that corrects the synchronization logic within pipe_fasync. The fix ensures that the result of the reader helper is preserved and that registration cleanup only occurs if the specific call actually added a new entry rather than updating an existing one. By keeping the pipe mutex held during these operations, changes to both the reader and writer lists are serialized properly. This prevents the scenario where a failed duplicate enable incorrectly removes pre-existing registrations while leaving others active. Administrators should ensure their systems are updated with the latest kernel versions that include this fix. Additionally, monitoring for unusual kernel panics or KASAN reports related to send_sigio can help identify affected instances in production environments before full patching is possible.

This vulnerability aligns with CWE-362, Concurrent Execution using Shared Resource with Improper Synchronization, as the root cause is a race condition involving shared data structures without proper locking at all critical points. It also relates to CWE-416, Use After Free, since the improper cleanup leads to dereferencing freed memory objects. From an ATT&CK perspective, this falls under Tactic TA0005 Defense Evasion or potentially TA0004 Impact depending on exploitation intent, specifically relating to techniques that exploit software vulnerabilities for denial of service or system compromise through kernel-level resource manipulation. The fix emphasizes the importance of atomic operations and proper mutex usage in high-concurrency subsystems like pipe management within operating systems.

Responsible

Linux

Reservation

09/25/2026

Disclosure

10/28/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

low

Sources

Want to stay up to date on a daily basis?

Enable the mail alert feature now!