A 24-Year-Old Linux Kernel TCP Bug Found via Stuck rsync Transfers
How Skroutz engineers traced mysterious rsync hangs to a 24-year-old TCP flow-control bug buried in the Linux kernel.
Skroutz gives each developer a writable, daily-refreshed database snapshot via a pipeline built on LVM snapshots, rsync, and ZFS. The setup scaled cleanly from 15 to 150 developers over nearly a decade, but occasionally an rsync transfer would hang indefinitely with no obvious cause, and the issue resisted reliable reproduction.
Engineers first ruled out network hardware — NIC offloading bugs, switch-level drops — before attaching strace and gdb to the stuck processes, which showed blocking syscalls but no forward progress. The real clue came from ss(8) output: the connection was sitting in a 'persist' timer state, meaning the sender had received a zero-window advertisement even though the receiver's buffer was actually empty and able to accept data.
That mismatch between an empty receive queue and a supposed zero window pointed to a genuine kernel-level defect in TCP's flow-control and zero-window-probe handling — a bug that had lived in the Linux kernel for 24 years. The case is a solid reminder of how low-level tools like ss, strace, and tcpdump remain essential for diagnosing mysterious production hangs, and how deep TCP internals knowledge still matters for infrastructure engineers.
This synthesis was produced from its source by AI; there is no human editor or manual review step. How we work