[Bug 298560] tcp: ACK header prediction can leave ISS validation enabled and reject valid ACKs
Date: Wed, 16 Sep 2026 08:39:04 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=298560
--- Comment #3 from Chen Zhao <ch3nzhao@gmail.com> ---
Created attachment 274796
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=274796&action=edit
Native FreeBSD TCP ISS regression reproducer (source, runner, and instructions)
I also reproduced this issue on an amd64 FreeBSD VM running in Microsoft Azure.
System: FreeBSD 15.1-RELEASE-p3, GENERIC amd64
Kernel revision: releng/15.1-n283611-88e7371d9dc2
Command:
sudo sh run.sh long
The test transferred 2 GiB + 128 KiB over a single TCP connection.
All 1,470,969 advancing ACKs were processed through header prediction,
with zero retransmissions.
After a window change forced general TCP processing, the final valid
ACK carrying one byte of data ('X') was incorrectly discarded as a
ghost ACK. recv() returned -1 with errno 35 (EWOULDBLOCK), and the
ghost ACK counter increased by one.
The reproducer reported:
REPRODUCED: valid ACK and X discarded as a ghost ACK
Full terminal output follows:
```
azureuser@chenzhao-test:~/freebsd-iss-reproducer $ sudo sh run.sh long
FreeBSD chenzhao-test 15.1-RELEASE-p3 FreeBSD 15.1-RELEASE-p3
releng/15.1-n283611-88e7371d9dc2 GENERIC amd64
15.1-RELEASE-p3
15.1-RELEASE-p3
mode=long initial_ghost_ack=rejected target=2147614720
progress: bytes=268435600 elapsed_ms=804
progress: bytes=536871200 elapsed_ms=1605
progress: bytes=805306800 elapsed_ms=2403
progress: bytes=1073742400 elapsed_ms=3207
progress: bytes=1342178000 elapsed_ms=4009
progress: bytes=1610613600 elapsed_ms=4816
progress: bytes=1879049200 elapsed_ms=5620
progress: bytes=2147484800 elapsed_ms=6421
transfer: bytes=2147614720 packets=1470969 advancing_acks=1470969
predicted_acks=1470969
snd_una_minus_iss=2147614721 retransmits=0 elapsed_ms=6422
request: received=-1 errno=35 ghost_ack_delta=1
REPRODUCED: valid ACK and X discarded as a ghost ACK
```
--
You are receiving this mail because:
You are the assignee for the bug.