Reliable Datagram Sockets

Reliable Datagram Sockets
Communication protocol
AbbreviationRDS
Developer(s)Oracle Corporation
IntroductionJune 9, 2009; 15 years ago (2009-06-09)
OSI layerTransport layer
Port(s)16385 (RDS-over-TCP)

Reliable Datagram Sockets (RDS) is a high-performance, low-latency, reliable, connectionless protocol for delivering datagrams. It is developed by Oracle Corporation.

It was included in the Linux kernel 2.6.30 which was released on 9 June 2009. The code was contributed by the OpenFabrics Alliance (OFA).[1]

On October 19, 2010, VSR announced CVE-2010-3904, a vulnerability within the Linux 2.6.30 kernel which could result in a local privilege escalation via the kernel's implementation of RDS.[2] This was subsequently fixed in Linux 2.6.36.[3]

On May 8, 2019, CVE-2019-11815 was published, regarding a race condition in the Linux RDS implementation that could lead to a use-after-free bug and possible arbitrary code execution.[4] The bug has been fixed in Linux 5.0.8.

RDS Header
Size (bits) Name Description
be64 h_sequence Sequence number
be64 h_ack Sequence number of last received message
be32 h_len Length of the message payload
be16 h_sport Port on source node
be16 h_dport Port on destination node
8 h_flags Described below
8 h_credit Credits given (used for credit-based flow control)
32 h_padding Padding for 64-bit struct alignment
16 h_csum 1's complement header checksum
128 h_exthdr Optional extension header space


RDS Header
Offset Octet 0 1 2 3
Octet Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 h_sequence
4 32
8 64 h_ack
12 96
16 128 h_len
20 160 h_sport h_dport
24 192 h_flags h_credit h_padding…
26 208 …h_padding h_csum
32 256 h_exthdr
36 288
40 320
44 352
Sequence (h_sequence): 64 bits
The sequence number.
Acknowledge (h_ack): 64 bits
The sequence number of last received message.
Length (h_len): 32 bits
The length of the message payload.
Source Port (h_sport): 16 bits
Identifies the sending port.
Destination Port (h_dport): 16 bits
Identifies the receiving port.
Flags (h_flags): 8 bits
Described below.
Credits (h_credit): 8 bits
Credits given (used for credit-based flow control).
Padding (h_padding): 32 bits
Padding for 64-bit struct alignment.
Checksum (h_csum): 16 bits
1's complement header checksum.
Extension Header (h_exthdr): 128 bits
Optional extension header space.

See also

References

  1. ^ "Linux 2 6 30 - Linux Kernel Newbies". Kernelnewbies.org. 2009-06-12. Retrieved 2015-10-11.
  2. ^ "VSR Security Advisory : Product Description". Vsecurity.com. Retrieved 2015-10-11.
  3. ^ "CVE-2010-3904". NIST National Vulnerability Database. Retrieved 2020-12-27.
  4. ^ "NVD - CVE-2019-11815". nvd.nist.gov. Retrieved 2019-05-14.