selftests: net: packetdrill: test exclusion of old ACK from TCP fast path

Add a packetdrill test for an in-sequence data segment carrying an
excessively old ACK.

Verify that the segment falls through from the TCP fast path to the slow
path, where the existing ACK validation rejects it and sends a challenge
ACK. The payload is not accepted and RCV.NXT remains unchanged.

Based on the reproducer from Commit 3d501dd326
("tcp: do not accept ACK of bytes we never sent").

Signed-off-by: Inbal Schussheim <inbal.lipshtat@mail.huji.ac.il>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260914090408.1435080-3-inbal.lipshtat@mail.huji.ac.il
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Inbal Schussheim 2026-09-14 12:04:08 +03:00 committed by Paolo Abeni
parent f81e6c3fb0
commit d841cd7513

View File

@ -0,0 +1,29 @@
// SPDX-License-Identifier: GPL-2.0
`./defaults.sh
sysctl -q net.ipv4.tcp_invalid_ratelimit=0
`
// Test rejection of data segments carrying excessively old ACKs
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0 bind(3, ..., ...) = 0
+0 listen(3, 1024) = 0
// ---------------- Handshake ------------------- //
+0 < S 0:0(0) win 65535
+0 > S. 0:0(0) ack 1 <...>
+0 < . 1:1(0) ack 1 win 65535
+0 accept(3, ..., ...) = 4
// Populate receive memory so the following segment can use
// header prediction.
+0 < P. 1:501(500) ack 1 win 65535
+0 > . 1:1(0) ack 501
// Send an in-sequence data segment carrying an excessively old ACK.
+0 < P. 501:1501(1000) ack 2794967397 win 65535
// Challenge ACK; RCV.NXT must remain 501.
+0 > . 1:1(0) ack 501