This flaw affects all Linux kernels above and including the 2.6.29 release, according to the advisory which was issued on Monday.
A modified Linux kernel is present in all Android devices, so this bug could be a source of annoyance if some script kiddie decides to exploit it.
The three bugs have been given their own CVE numbers: CVE-2019-11477 has been graded as important while CVE-2019-11478 and CVE-2019-11479 have been described as moderate.
TCP selective acknowledgement aka TCP SACK allows a device receiving data to tell the sender which segments have been accepted, ensuring that segments which have not reached will be sent again. If TCP SACK is disabled, the number of packets that have to be resent is increased greatly.
The maximum segment size defines how much data is in a reconstructed TCP segment and its value is set in the TCP header.
A Red Hat advisory said: "As packets might become fragmented when transmitting across different routes, a host must specify the MSS as equal to the largest IP datagram payload size that a host can handle.
"Very large MSS sizes might mean that a stream of packets ends up fragmented on their way to the destination, whereas smaller packets can ensure less fragmentation but end up with unused overhead."
Netflix's Jonathan Looney said in an advisory that the first bug could be exploited by someone sending a series of SACKs packets to trigger an integer overflow, resulting in kernel panic.
In the case of the second bug, a crafted sequence of SACKs can fragment the TCP retransmission queue and slow down a connection so that it takes up all system resources. In the case of kernels before 4.15, the queue can be slowed down even further.
The third Linux bug affects all kernel versions and allows an attacker to force the break-up of responses to TCP requests into bits that each contain only eight bytes of data, resulting in a big rise in the amount of bandwidth needed to deliver the entire load of data.
There is one bright side to this bug in that the attacker needs to keep working to prolong the pain felt at the other end.
Finally, Looney outlined a bug in the FreeBSD kernel that allows an attacker to slow down SACKs packets and fragment the RACK send map. The queue could then be further slowed down for any further SACKs packets received for that same TCP connection.
Looney offered links to patches and also said a workaround for the two SACKs bugs in Linux was to disable such processing by setting the value of /proc/sys/net/ipv4/tcp_sack to zero.