[PATCH net v2 0/2] tcp: protect locked SO_RCVBUF from Silly Window Syndrome

Ankit Jain
2026-05-04T14:53:37Z

This series fixes a regression where locked SO_RCVBUF sockets suffer from
Silly Window Syndrome (SWS).

Recent memory fragmentation optimizations apply truesize penalties to the
scaling_ratio. For applications locking SO_RCVBUF (like Java/Tomcat) and
processing small packets, this drops the scaling_ratio to 1. This
collapses the advertised window and causes 504 Gateway Timeouts.

Patch 1 bypasses this penalty for locked buffers unless skb->len > advmss.
Patch 2 adds a packetdrill test.

Link to v1:
https://lore.kernel.org/all/20260427152756.1205-1-ankit-aj.jain@broadcom.com/

v1 -> v2:
- Shifted protection from window_clamp to scaling_ratio based on Jakub
Kicinski's feedback.
- Added skb->len > advmss check to ensure large aggregate payloads (GRO)
are still penalized. This allows tcp_rcv_neg_window.pkt to pass.
- Added a new packetdrill test (Patch 2/2).

Testing:
- Verified fix in a live Java/Tomcat environment (504 timeouts resolved).
- Verified deadlock prevention via the new tcp_locked_rcvbuf_sws.pkt.
- Passed upstream regression tests: tcp_rcv_neg_window.pkt,
tcp_rcv_wnd_shrink_allowed.pkt, tcp_rcv_wnd_shrink_nomem.pkt,
tcp_rcv_zero_wnd_fin.pkt, and tcp_rcv_big_endseq.pkt.

Ankit Jain (2):
tcp: protect locked SO_RCVBUF from Silly Window Syndrome
selftests/net: add packetdrill test for locked SO_RCVBUF SWS

net/ipv4/tcp_input.c | 8 ++++-
.../net/packetdrill/tcp_locked_rcvbuf_sws.pkt | 34 +++++++++++++++++++
2 files changed, 41 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/net/packetdrill/tcp_locked_rcvbuf_sws.pkt

--
2.53.0