From 440694e3d39beeb144dd600b76c5245f935bc22e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 23 Jul 2011 03:48:10 +0200 Subject: [PATCH] Fix TCP retransmission --- grub-core/net/tcp.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/grub-core/net/tcp.c b/grub-core/net/tcp.c index f6d864523..578a254f4 100644 --- a/grub-core/net/tcp.c +++ b/grub-core/net/tcp.c @@ -708,12 +708,14 @@ grub_net_recv_tcp_packet (struct grub_net_buff *nb, for (unack = sock->unack_first; unack; unack = next) { grub_uint32_t seqnr; + struct tcphdr *unack_tcph; next = unack->next; seqnr = grub_be_to_cpu32 (((struct tcphdr *) unack->nb->data) ->seqnr); - seqnr += (nb->tail - nb->data - - (grub_be_to_cpu16 (tcph->flags) >> 12) * 4); - if (grub_be_to_cpu16 (tcph->flags) & TCP_FIN) + unack_tcph = (struct tcphdr *) unack->nb->data; + seqnr += (unack->nb->tail - unack->nb->data + - (grub_be_to_cpu16 (unack_tcph->flags) >> 12) * 4); + if (grub_be_to_cpu16 (unack_tcph->flags) & TCP_FIN) seqnr++; if (seqnr > acked)