HIGH Introduced in 6.16
tcp DevmemTx Bypass
CVE-2026-90051
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI7.8HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: tcp: reject non zerocopy devmem tx Devmem tcp tx doesn't work without zero-copy, however it's not currently enforced if NETIF_F_SG isn't present. In this case, tcp_sendmsg_locked() will try the copy path and try to copy data from an iovec which consists of offsets into the dma-buf and would normally fail. Moreover, d9c56501c72fd ("net: tcp: block mixing readable and unreadable frags") relies on that and assumes that the devmem binding is present IFF we're using the zero-copy path, which can be used to mix net-iov and pages in a single skb, and break invariants. Let's reject devmem tx without zero-copy. Note, the parameter check the patch is modifying is too loose, we can create an io_uring request with dmabuf_id and all ZC flags, but which won't have the binding. We replace it with stricter validation.
02KernelScan AI Analysis
Risk summary
A local user can bypass TCP devmem zero-copy validation, causing the kernel to attempt to copy data from device-memory offsets. This can lead to memory corruption or kernel crashes by mixing incompatible memory types in network buffers, breaking internal invariants.
Vulnerability analysis
The TCP devmem transmit path fails to properly reject requests that supply a device memory identifier without genuine zero-copy bindings, allowing a caller to bypass the intended validation. This causes the kernel to attempt copying data from device memory offsets as if they were normal memory, which can corrupt internal network buffer structures by mixing incompatible memory types. The fix tightens the parameter check so that devmem transmit is rejected unless the zero-copy path and a valid binding are actually in use. This is reachable by a local process using asynchronous I/O or sockets with zero-copy and devmem options, requiring no special privileges beyond a standard local account.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.18 | 6.16 | 6.18.52 | 2151b2bcf6fc |
| 7.2 | 6.16 | 7.2.6 | b04326c7927a |
| mainline | 6.16 | 7.3 | 125755776bc6 |