HIGH
io_uring Bundle Length Overflow
CVE-2026-31774
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
KernelScan AI7.1HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: io_uring/net: fix slab-out-of-bounds read in io_bundle_nbufs() sqe->len is __u32 but gets stored into sr->len which is int. When userspace passes sqe->len values exceeding INT_MAX (e.g. 0xFFFFFFFF), sr->len overflows to a negative value. This negative value propagates through the bundle recv/send path: 1. io_recv(): sel.val = sr->len (ssize_t gets -1) 2. io_recv_buf_select(): arg.max_len = sel->val (size_t gets 0xFFFFFFFFFFFFFFFF) 3. io_ring_buffers_peek(): buf->len is not clamped because max_len is astronomically large 4. iov[].iov_len = 0xFFFFFFFF flows into io_bundle_nbufs() 5. io_bundle_nbufs(): min_t(int, 0xFFFFFFFF, ret) yields -1, causing ret to increase instead of decrease, creating an infinite loop that reads past the allocated iov[] array This results in a slab-out-of-bounds read in io_bundle_nbufs() from the kmalloc-64 slab, as nbufs increments past the allocated iovec entries. BUG: KASAN: slab-out-of-bounds in io_bundle_nbufs+0x128/0x160 Read of size 8 at addr ffff888100ae05c8 by task exp/145 Call Trace: io_bundle_nbufs+0x128/0x160 io_recv_finish+0x117/0xe20 io_recv+0x2db/0x1160 Fix this by rejecting negative sr->len values early in both io_sendmsg_prep() and io_recvmsg_prep(). Since sqe->len is __u32, any value > INT_MAX indicates overflow and is not a valid length.
02KernelScan AI Analysis
Risk summary
A local attacker can trigger a slab-out-of-bounds read by submitting io_uring network operations with specially crafted length values. This can lead to information disclosure from kernel memory and potential system instability. The vulnerability requires local access but no special privileges beyond the ability to use io_uring.
Vulnerability analysis
Root Cause: The vulnerability stems from an integer overflow when converting a __u32 value (sqe->len) to an int (sr->len). When userspace passes values exceeding INT_MAX (e.g., 0xFFFFFFFF), the signed integer sr->len becomes negative due to overflow. This negative value propagates through the bundle recv/send path, eventually causing an infinite loop in io_bundle_nbufs() that reads past allocated iovec array boundaries.
Attack Surface: This vulnerability is exploitable through the io_uring interface, which requires local access to the system. An attacker needs the ability to submit io_uring operations with crafted sqe->len values. The vulnerability affects the bundle recv/send functionality introduced in kernel 6.10.
Fix Mechanism: The patch adds validation checks in both io_sendmsg_prep() and io_recvmsg_prep() functions to reject negative sr->len values early. Since sqe->len is __u32, any value greater than INT_MAX indicates overflow and is treated as invalid, returning -EINVAL to prevent the vulnerability chain.
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 6.12 | 6.12.81 | 90ced24c500a |
| 6.18 | 6.18.22 | c314b405dcc4 |
| 6.19 | 6.19.12 | 1b655cd31134 |
| mainline | 7.0 | b948f9d5d305 |