Thanks. I had trouble using the clock to seed the random number generator due to some dependency issues. I'm not strong enough in C to figure that out with the limited GRUB libraries (since standard libraries are not used), so I did what I could to show the intended behavior. Please feel free to submit a much better patch as I don't have the expertise to do so.
Thank you, Robert LeBlanc Sent from a mobile device, please excuse any typos. On Mon, Jun 6, 2022, 11:27 AM Vladimir 'phcoder' Serbinenko < phco...@gmail.com> wrote: > > > Le lun. 6 juin 2022, 19:25, Vladimir 'phcoder' Serbinenko < > phco...@gmail.com> a écrit : > >> 256 is a bad modulo. A prime would be a much better one for those >> purposes. Also get_time_ms counts up from arbitrary point in time, often >> boot. I suggest using some combination of etc >> > RTC, not etc > >> >> and get_time to seed an LFSR algorithm >> >> Le lun. 6 juin 2022, 18:37, Robert LeBlanc <rob...@leblancnet.us> a >> écrit : >> >>> GRUB uses a static source TCP port and increments for each new >>> connection. When rapidly restarting GRUB this can cause issues with some >>> firewalls that suspect that a reply attack is happening. In addition >>> GRUB does not ACK the last FIN,ACK when booting the kernel and initrd >>> from HTTP for example. This cause the remote HTTP server to keep the TCP >>> session in TIME_WAIT and reject new connections from the same port >>> combination when restarted quickly. This helps to work around both >>> problems by shifting the source port by a small amount based on time. >>> >>> The missing final ACK should also be addressed, but I'm not sure how to >>> resolve that. >>> >>> Signed-off-by: Robert LeBlanc <rob...@leblancnet.us> >>> --- >>> grub-core/net/tcp.c | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/grub-core/net/tcp.c b/grub-core/net/tcp.c >>> index 93dee0caa..2eefd3168 100644 >>> --- a/grub-core/net/tcp.c >>> +++ b/grub-core/net/tcp.c >>> @@ -569,7 +569,7 @@ grub_net_tcp_open (char *server, >>> struct grub_net_network_level_interface *inf; >>> grub_net_network_level_address_t gateway; >>> grub_net_tcp_socket_t socket; >>> - static grub_uint16_t in_port = 21550; >>> + grub_uint16_t in_port = 21550 + grub_get_time_ms () % 256; >>> struct grub_net_buff *nb; >>> struct tcphdr *tcph; >>> int i; >>> @@ -603,7 +603,7 @@ grub_net_tcp_open (char *server, >>> socket->inf = inf; >>> socket->out_nla = addr; >>> socket->ll_target_addr = ll_target_addr; >>> - socket->in_port = in_port++; >>> + socket->in_port = in_port; >>> socket->recv_hook = recv_hook; >>> socket->error_hook = error_hook; >>> socket->fin_hook = fin_hook; >>> -- >>> 2.35.1 >>> >>> >>> _______________________________________________ >>> Grub-devel mailing list >>> Grub-devel@gnu.org >>> https://lists.gnu.org/mailman/listinfo/grub-devel >>> >> _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel