HIGH Introduced in 6.12
io_uring BufferRing OOB
CVE-2026-97618
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
01Description
In the Linux kernel, the following vulnerability has been resolved: io_uring/net: don't overconsume buffers when using MSG_TRUNC When a recv/recvmsg is issued with MSG_TRUNC and the incoming packet is larger than the provided buffer, the net layer returns the full length of the packet rather than the number of bytes actually copied into the buffer. As a result, io_uring advances more of the provided buffer ring than was actually filled. Use the actual filled region size to consume the buffer, but still return the full size to preserve MSG_TRUNC semantics. Take care with multishot, because that seems to already truncate the consumption based on the available payload size. This was reported in https://github.com/axboe/liburing/issues/1619. [axboe: fold in size_t unsigned fix]
02KernelScan AI Analysis
Risk summary
A local unprivileged process using io_uring receive operations with MSG_TRUNC can trigger overconsumption of the provided buffer ring, advancing the ring head past valid bounds. This corrupts buffer ring state and can lead to out-of-bounds kernel memory access. Any system exposing io_uring to untrusted local users or container workloads is at risk of privilege escalation or kernel crash.
Vulnerability analysis
When a receive operation is issued through io_uring with the MSG_TRUNC flag and an incoming packet is larger than the provided buffer, the network layer returns the full packet length rather than the number of bytes actually copied. The io_uring buffer management incorrectly uses this inflated return value to advance the provided buffer ring, consuming more buffer space than was actually filled and pushing the ring head pointer past valid bounds. This can corrupt adjacent kernel memory and enable out-of-bounds reads or writes on subsequent operations. The fix separates the value returned to the application (which preserves MSG_TRUNC semantics by reporting the full packet size) from the value used internally for buffer consumption, clamping the latter to the minimum of the return value and the actual buffer length. The bug is reachable by any local process that can submit io_uring receive operations using provided buffers and MSG_TRUNC, requiring no special privileges or capabilities.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.12 | 6.12 | 6.12.112 | 41d24d2fb168 |
| 6.18 | 6.12 | 6.18.53 | 927d96f91c58 |
| 7.2 | 6.12 | 7.2.7 | 2e70ea75c7bb |
| mainline | 6.12 | 7.3 | 6028b543884f |
| cip/6.12 | 6.12 | 6.12.112-cip33 | 41d24d2fb168 |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.112-cip33 |