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

Reply via email to