CVE-2026-31774Linux内核io_uring组件中存在整数溢出漏洞。当处理用户传入的`sqe->len`参数时,由于类型转换错误(__u32转int),超大数值会溢出为负数。该负数在后续处理中转换为极大值,导致长度检查失效,最终在`io_bundle_nbufs`函数中引发slab-out-of-bounds读取,可能导致内核崩溃或信息泄露。
漏洞源于`sqe->len`(类型为`__u32`)被直接赋值给`sr->len`(类型为`int`)。当用户空间传入如0xFFFFFFFF的大值时,有符号整数溢出导致`sr->len`变为负数。该负数在`io_recv`中被转换为`ssize_t`(-1),随后在`io_recv_buf_select`中转换为`size_t`变为0xFFFFFFFFFFFFFFFF。这导致`io_ring_buffers_peek`中的`max_len`限制失效,`iov[].iov_len`被设为0xFFFFFFFF。最终在`io_bundle_nbufs`中,`min_t(int, 0xFFFFFFFF, ret)`计算结果为-1,导致循环计数器异常增加而非减少,形成无限循环并读取超出分配的`iov`数组边界,触发KASAN检测。