KernelScan.io

HIGH Introduced in 2.6.30

rds CongestionMap OOB

CVE-2026-97954

CVSS 7.9 / 10.0 KernelScan AI

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

01

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.

02

Engine v0.6.0

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.

Affectednet/rds/message.c (RDS - Reliable Datagram Sockets)

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.

03

BranchIntroducedFixed inPatch commit
5.102.6.305.10.2717d7705ce73ea
5.152.6.305.15.2223230961a72b3
6.12.6.306.1.189ee74a4b42e3a
6.122.6.306.12.111ef3565a418b8
6.182.6.306.18.538cbfeb54bf78
6.62.6.306.6.158348492de88bc
7.22.6.307.2.7f4649a716be2
mainline2.6.307.32ac09b5353fe
cip/5.102.6.305.10.271-cip787d7705ce73ea
cip/6.12.6.306.1.189-cip61ee74a4b42e3a
cip/6.1-rt2.6.306.1.189-cip61-rt32ee74a4b42e3a
cip/6.122.6.306.12.111-cip32ef3565a418b8

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32
cip/6.1Fixed in 6.1.189-cip61
cip/6.1-rtFixed in 6.1.189-cip61-rt32
cip/5.10Fixed in 5.10.271-cip78
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.268-cip77-rt34)
cip/4.19Affected — no CIP fix yet (latest 4.19.325-cip136)
cip/4.19-rtAffected — no CIP fix yet (latest 4.19.325-cip136-rt50)
cip/4.4Affected — no CIP fix yet (latest 4.4.302-cip115)
cip/4.4-rtAffected — no CIP fix yet (latest 4.4.302-cip115-rt63)