CVE-2026-52995: Linux Kernel RDS Information Disclosure via Uninitialized Memory
A vulnerability in the Linux kernel's RDS (Reliable Datagram Sockets) networking subsystem leaks uninitialized kernel memory to unprivileged local users. When certain RDS connection state queries are made, the kernel copies stack memory that was never properly initialized to user space, potentially exposing sensitive kernel addresses and data. The vulnerability affects code paths where the connection info visitor functions fail to populate all output fields before the buffer is returned to the caller.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 5.5 MEDIUM · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
- Weaknesses (CWE)
- —
- Affected products
- 1 configuration(s)
- Published / Modified
- 2026-06-24 / 2026-07-15
NVD description (verbatim)
In the Linux kernel, the following vulnerability has been resolved: net/rds: zero per-item info buffer before handing it to visitors rds_for_each_conn_info() and rds_walk_conn_path_info() both hand a caller-allocated on-stack u64 buffer to a per-connection visitor and then copy the full item_len bytes back to user space via rds_info_copy() regardless of how much of the buffer the visitor actually wrote. rds_ib_conn_info_visitor() and rds6_ib_conn_info_visitor() only write a subset of their output struct when the underlying rds_connection is not in state RDS_CONN_UP (src/dst addr, tos, sl and the two GIDs via explicit memsets). Several u32 fields (max_send_wr, max_recv_wr, max_send_sge, rdma_mr_max, rdma_mr_size, cache_allocs) and the 2-byte alignment hole between sl and cache_allocs remain as whatever stack contents preceded the visitor call and are then memcpy_to_user()'d out to user space. struct rds_info_rdma_connection and struct rds6_info_rdma_connection are the only rds_info_* structs in include/uapi/linux/rds.h that are not marked __attribute__((packed)), so they have a real alignment hole. The other info visitors (rds_conn_info_visitor, rds6_conn_info_visitor, rds_tcp_tc_info, ...) write all fields of their packed output struct today and are not known to be vulnerable, but a future visitor that adds a conditional write-path would have the same bug. Reproduction on a kernel built without CONFIG_INIT_STACK_ALL_ZERO=y: a local unprivileged user opens AF_RDS, sets SO_RDS_TRANSPORT=IB, binds to a local address on an RDMA-capable netdev (rxe soft-RoCE on any netdev is sufficient), sendto()'s any peer on the same subnet (fails cleanly but installs an rds_connection in the global hash in RDS_CONN_CONNECTING), then calls getsockopt(SOL_RDS, RDS_INFO_IB_CONNECTIONS). The returned 68-byte item contains 26 bytes of stack garbage including kernel text/data pointers: 0..7 0a 63 00 01 0a 63 00 02 src=10.99.0.1 dst=10.99.0.2 8..39 00 ... gids (memset-zeroed) 40..47 e0 92 a3 81 ff ff ff ff kernel pointer (max_send_wr) 48..55 7f 37 b5 81 ff ff ff ff kernel pointer (rdma_mr_max) 56..59 01 00 08 00 rdma_mr_size (garbage) 60..61 00 00 tos, sl 62..63 00 00 alignment padding 64..67 18 00 00 00 cache_allocs (garbage) Fix by zeroing the per-item buffer in both rds_for_each_conn_info() and rds_walk_conn_path_info() before invoking the visitor. This covers the IPv4/IPv6 IB visitors and hardens all current and future visitors against the same class of bug. No functional change for visitors that fully populate their output. Changes in v2: - retarget at the net tree (subject prefix "[PATCH net v2]", net/rds: prefix in the title) - pick up Reviewed-by tags from Sharath Srinivasan and Allison Henderson
8 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability exists in rds_for_each_conn_info() and rds_walk_conn_path_info() kernel functions, which pass caller-allocated stack buffers to per-connection visitor callbacks. The IB (InfiniBand) connection info visitors—rds_ib_conn_info_visitor() and rds6_ib_conn_info_visitor()—only conditionally initialize portions of their output structs when connections are in specific states. When an RDS connection is not in RDS_CONN_UP state, several fields (max_send_wr, max_recv_wr, max_send_sge, rdma_mr_max, rdma_mr_size, cache_allocs) and alignment padding in rds_info_rdma_connection and rds6_info_rdma_connection structures remain uninitialized. The kernel then copies the entire buffer—including uninitialized portions—to user space via rds_info_copy() and memcpy_to_user(), leaking kernel stack content. The structures are not marked __attribute__((packed)), creating real alignment holes that remain populated with whatever preceded the function call.
Business impact
This is an information disclosure vulnerability with localized impact. Unprivileged local users can extract kernel memory containing pointers and potentially sensitive data through a simple getsockopt() call on RDS sockets. While the CVSS score reflects this as a denial-of-service-capable issue (due to vector component A:H), the primary risk is information leakage that could support kernel ASLR bypass or facilitate more sophisticated attacks. Organizations with multi-tenant systems, containers, or shared Linux hosts face elevated risk; single-user workstations and servers without local user access are less affected.
Affected systems
Linux kernel versions are affected when compiled with AF_RDS and RDMA support enabled. The vulnerability requires local access and an RDMA-capable network interface (or soft-RoCE emulation on any NIC). Systems must have RDS transport set to IB (InfiniBand) and allow unprivileged user access to RDS sockets. Verification against kernel source (net/rds/info.c and related files) is necessary to determine exact vulnerable versions; the patch addresses the root cause in the visitor framework.
Exploitability
Exploitability is straightforward for local attackers. An unprivileged user can open an AF_RDS socket, set SO_RDS_TRANSPORT=IB, bind to a local RDMA-capable interface, initiate a connection, and call getsockopt(SOL_RDS, RDS_INFO_IB_CONNECTIONS) to retrieve the uninitialized buffer. No special privileges, race conditions, or crash-inducing steps are required. The attack is reliable and repeatable. However, exploitation requires RDS to be enabled in the kernel and RDMA hardware (or rxe soft-RoCE) to be present and accessible.
Remediation
The fix zeroes the per-item buffer in both rds_for_each_conn_info() and rds_walk_conn_path_info() before invoking visitor callbacks. This ensures that any uninitialized fields or padding holes are cleared before the buffer reaches user space, eliminating the information leak while maintaining functional compatibility with visitors that fully populate their output. The patch is minimal, non-invasive, and applies consistently across IPv4/IPv6 IB visitors and future code.
Patch guidance
Apply the kernel patch that adds memset(0) initialization in the rds_for_each_conn_info() and rds_walk_conn_path_info() functions prior to visitor invocation. Verify the patch against the official Linux kernel repository (net tree) with subject prefix net/rds: and the message describing zeroing of per-item info buffers. Distributions will backport this fix to their stable kernel branches; check your vendor's advisory for specific version numbers and update timelines.
Detection guidance
Monitor kernel logs for RDS socket creation and getsockopt() calls from unprivileged processes, particularly those using SOL_RDS option level. Network-level detection is difficult since the attack uses local system calls. In containerized/multi-tenant environments, restrict RDS module loading and disable AF_RDS if not required. Use kernel configuration audits to identify systems with CONFIG_RDS and CONFIG_RDS_RDMA enabled. Intrusion detection can flag repeated getsockopt(RDS_INFO_*) patterns that may indicate probing for kernel addresses.
Why prioritize this
Although CVSS 5.5 is moderate, the vulnerability merits prompt attention in environments with untrusted local users. Information disclosure vulnerabilities are valuable for attackers building exploit chains; leaked kernel pointers defeat ASLR and enable more powerful kernel exploits. Environments sharing Linux hosts across users, or running containers with overlapping security domains, should treat this as high priority. Single-user systems and air-gapped servers can deprioritize if RDS is unused.
Risk score, explained
CVSS 3.1 vector CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H yields a score of 5.5 (MEDIUM). Attack Vector is Local (AV:L) and Access Complexity is Low (AC:L), reflecting straightforward exploitation. Privileges Required (PR:L) indicates unprivileged user access suffices. No User Interaction (UI:N) and Unchanged Scope (S:U) keep the score moderate. The C:N (no confidentiality impact) and I:N (no integrity impact) are debatable—the leak does expose kernel memory—but the official vector reflects the kernel's perspective: the RDS subsystem itself is not compromised in confidentiality or integrity, only denies availability of uninitialized memory. In practice, information disclosure raises real-world risk beyond the numeric score.
Frequently asked questions
What kernel versions are vulnerable?
The vulnerability affects Linux kernels with RDS networking support. Exact versions depend on your distribution's kernel tree. Check your vendor's advisory and kernel source history at kernel.org or your distribution repository to identify which versions require the patch. Upstream Linux has addressed this in the net tree branch.
Do I need RDS enabled to be vulnerable?
Yes. Your kernel must be compiled with CONFIG_RDS and CONFIG_RDS_RDMA (InfiniBand RDMA support) enabled, and you must have an RDMA-capable network interface or soft-RoCE emulation. If RDS is not in your kernel configuration, you are not affected. Check your running kernel config at /boot/config-$(uname -r).
Can this be exploited remotely?
No. This is a local-only vulnerability. An attacker must have user account access to the Linux system to open RDS sockets and call getsockopt(). Remote exploitation is not possible.
What data is leaked?
The leaked data is kernel stack memory—typically uninitialized buffer fields, alignment padding, and kernel pointers stored nearby on the stack when the visitor functions run. These pointers can be used to defeat ASLR and support subsequent kernel exploits, making this a stepping stone in more complex attacks rather than a direct privilege escalation.
This analysis is based on vulnerability data current as of the publication date. Specific patch version numbers, affected kernel releases, and vendor remediation timelines must be verified against official Linux kernel advisories and your distribution's security updates. CVSS scores are provided as context; prioritization should also consider your specific deployment, security posture, and threat model. This vulnerability requires local access and RDS kernel module enablement; air-gapped single-user systems face minimal risk. For the most current patch status and mitigations, consult kernel.org, your Linux distribution's security advisory, and CISA's vulnerability database. Source: NVD (public-domain), retrieved 2026-07-31. Analysis generated by SEC.co (claude-haiku-4-5).
Affected vendors
Related vulnerabilities
- CVE-2025-71313MEDIUMLinux Kernel PCI Endpoint NULL Pointer Dereference
- CVE-2025-71314MEDIUMLinux Panthor GPU Driver Denial of Service via Cache Flush Timeout
- CVE-2025-71315MEDIUMLinux Kernel vkms DRM Vblank Timer Denial of Service
- CVE-2026-0268MEDIUMPrisma Access Agent Linux VPN Bypass Vulnerability
- CVE-2026-10004MEDIUMChrome UI Spoofing Vulnerability – Password Dialog Hijacking
- CVE-2026-10018MEDIUMInteger Overflow in Chrome ANGLE GPU Graphics Layer
- CVE-2026-10912MEDIUMChrome Extension Same-Origin Policy Bypass (CVSS 6.5)
- CVE-2026-10916MEDIUMChrome DevTools UXSS Vulnerability