On Tue, Sep 02, 2025 at 02:58:50PM +0800, Michael Chang via Grub-devel wrote: > GRUB's TCP stack assigns source ports for outgoing connections starting > at 21550 and increments sequentially by 1 (e.g., 21550, 21551, ...). > While this generally works, it can lead to failures if the system > reboots rapidly and reuses the same source port too soon. > > This issue was observed on powerpc-ieee1275 platforms using CAS (Client > Architecture Support) reboot. In such cases, loading the initrd over > HTTP may fail with connection timeouts. Packet captures show the failed > connections are flagged as "TCP Port Number Reused" by Wireshark. > > The root cause is that GRUB reuses the same port shortly after reboot, > while the server may still be tracking the previous connection in > TIME_WAIT. This can result in the server rejecting the connection > attempt or responding with a stale ACK or RST, leading to handshake > failure. > > This patch fixes the issue by introducing a time based source port > selection strategy. Instead of always starting from port 21550, GRUB now > computes an initial base port based on the current RTC time, divided > into 5 minute windows. The purpose of this time based strategy is to > ensure that GRUB avoids reusing the same source port within a 5 minute > window, thereby preventing collisions with stale server side connection > tracking that could interfere with a new TCP handshake. > > A step size of 8 ensures that the same port will not be reused across > reboots unless GRUB opens more than 8 TCP connections per second on > average, something that is highly unlikely. In typical usage, a GRUB > boot cycle lasts about 15 seconds and may open fewer than 100 > connections total, well below the reuse threshold. This makes the > approach robust against short reboot intervals while keeping the logic > simple and deterministic. > > Signed-off-by: Michael Chang <[email protected]> > Reviewed-by: Sudhakar Kuppusamy <[email protected]>
Reviewed-by: Daniel Kiper <[email protected]> Daniel _______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
