CVE-2026-90054: tcp: fix corruption of urgent data on multi-segment retransmit
In the Linux kernel, the following vulnerability has been resolved:
tcp: fix corruption of urgent data on multi-segment retransmit
On the normal xmit path, while in urgent mode we refuse to build a multi-segment TSO packet, so every segment gets its own urgptr:
/ tcpwritexmit() / limit = mssnow; if (tsosegs > 1 && !tcpurgmode(tp)) limit = tcpmsssplitpoint(...);
The retransmit path has no such guard. tcpretransmitskb() builds a segs > 1 skb and hands it to the GSO layer, which only advances th->seq per segment and copies urgptr verbatim:
/ tcpretransmitskb() / len = curmss segs; / segs > 1, no urgmode check / ... / tcpgsosegment(): bumps seq only, urgptr is copied /
urgptr is an offset from the segment's own seq, so a copied value points at a different place on each segment. The receiver rebuilds the absolute urgent seq as seg.seq + urgptr, so it walks a moving urgent point instead of the one OOB byte:
seg1 seq 1 urgptr 5001 -> urgent @ 5001 (ok) seg2 seq 1001 urgptr 5001 -> urgent @ 6001 (wrong, +MSS) seg3 seq 2001 urgptr 5001 -> urgent @ 7001 (wrong, +2MSS)
The real OOB byte is never pointed at, so the receiver stops splicing it out and delivers it as normal in-band data, corrupting the stream.
Guard the retransmit length like the xmit path: keep segs = 1 while in urgent mode.
Affected Software
Event History
Frequently Asked Questions
What conditions are needed for the issue to occur?
The connection must use TCP urgent mode and encounter retransmission of data that is assembled into a multi-segment GSO/TSO packet. The normal transmit path avoids this combination, but the vulnerable retransmit path did not apply the same urgent-mode guard.
What happens to urgent data when the affected retransmit path is used?
The same urgent pointer is copied into each retransmitted segment even though it is relative to each segment's sequence number. This makes the receiver calculate a different urgent position for later segments, so the actual out-of-band byte may not be identified or removed correctly.
What should a fix change in the retransmission behavior?
Retransmission must avoid building multi-segment packets while TCP urgent mode is active, matching the normal transmit path. The listed stable kernel references contain the resolved changes.