Reliable Datagram Sockets
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). 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. This was subsequently fixed in Linux 2.6.36. 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. The bug has been fixed in Linux 5.0.8.
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
| Communication protocol | |
| Abbreviation | RDS |
|---|---|
| Developer(s) | Oracle Corporation |
| Introduction | June 9, 2009 |
| OSI layer | Transport layer |
| Port(s) | 16385 (RDS-over-TCP) |
| Internet protocol suite |
|---|
| Application layer |
| Transport layer |
| Internet layer |
| Link layer |
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.
Header
[edit]| 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 |
| 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
[edit]References
[edit]- ^ "Linux 2 6 30 - Linux Kernel Newbies". Kernelnewbies.org. 2009-06-12. Archived from the original on 2012-04-02. Retrieved 2015-10-11.
- ^ "VSR Security Advisory : Product Description". Vsecurity.com. Archived from the original on 2022-12-04. Retrieved 2015-10-11.
- ^ "CVE-2010-3904". NIST National Vulnerability Database. Archived from the original on 2020-12-21. Retrieved 2020-12-27.
- ^ "NVD - CVE-2019-11815". nvd.nist.gov. Retrieved 2019-05-14.
External links
[edit]- Oss.oracle.com Archived 2023-02-03 at the Wayback Machine
- Oss.oracle.com Archived 2021-02-28 at the Wayback Machine
- https://oss.oracle.com/projects/rds/dist/documentation/rds-3.1-spec.html