HIGH Introduced in 2.6.30
rds CongestionMap OOB
CVE-2026-97954
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: net/rds: fix tcp stream corruption with large pages rds_message_map_pages() assigns PAGE_SIZE bytes to every scatterlist entry, even when total_len ends in a partial page. The RDS congestion map is defined as 8192 bytes, so on systems with PAGE_SIZE greater than 8192 the scatterlist maps bytes beyond the end of the congestion map. RDS-TCP transmits the SG contents according to those lengths, so the extra bytes become part of the TCP RDS stream and are interpreted as subsequent RDS message headers, corrupting the stream. Limit the final scatterlist mapping to the number of bytes remaining. This has no effect on systems with a 4K page size and allows RDS-TCP to be used on systems with 16K and larger page sizes. The RDS selftest, which previously hung on 16K pages, now passes.
02KernelScan AI Analysis
Risk summary
On systems with page sizes larger than 8192 bytes (e.g., 16K or 64K pages common on ARM64 and PowerPC), the RDS protocol's congestion map transmission reads beyond the allocated buffer and sends excess kernel memory over the network. Any unprivileged local user who can open an RDS socket triggers this on every congestion map update, leaking kernel memory to the remote peer and corrupting the RDS-TCP stream. Systems with standard 4K pages are unaffected.
Vulnerability analysis
When the RDS protocol transmits its congestion map, the message construction code unconditionally assigns a full page size to each scatterlist entry, even when the actual data (8192 bytes) does not fill a complete page. On systems whose page size exceeds 8192 bytes — such as ARM64 or PowerPC configurations with 16K or 64K pages — the final scatterlist entry maps bytes beyond the end of the congestion map buffer. RDS-TCP then transmits those extra bytes as part of the TCP stream, where the remote peer interprets them as RDS message headers, corrupting the protocol stream and potentially exposing kernel memory to the receiver. The fix limits the final scatterlist entry to only the remaining bytes of the total length, so no out-of-bounds data is mapped or transmitted. The bug is reachable by any unprivileged local user who can create an RDS socket, provided the rds module is loaded and the system uses a page size larger than 8192; standard 4K-page systems are unaffected.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.10 | 2.6.30 | 5.10.271 | 7d7705ce73ea |
| 5.15 | 2.6.30 | 5.15.222 | 3230961a72b3 |
| 6.1 | 2.6.30 | 6.1.189 | ee74a4b42e3a |
| 6.6 | 2.6.30 | 6.6.158 | 348492de88bc |
| 6.12 | 2.6.30 | 6.12.111 | ef3565a418b8 |
| 6.18 | 2.6.30 | 6.18.53 | 8cbfeb54bf78 |
| 7.2 | 2.6.30 | 7.2.7 | f4649a716be2 |
| mainline | 2.6.30 | 7.3-rc3 | 2ac09b5353fe |
| cip/6.12 | 2.6.30 | 6.12.111-cip32 | ef3565a418b8 |