=== modified file 'grub-core/net/ip.c' --- grub-core/net/ip.c 2012-02-09 22:43:43 +0000 +++ grub-core/net/ip.c 2012-05-01 18:28:59 +0000 @@ -240,7 +240,7 @@ FOR_NET_NETWORK_LEVEL_INTERFACES (inf) if (inf->card == card && inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_DHCP_RECV - && grub_net_hwaddr_cmp (&inf->hwaddress, hwaddress) == 0) + && inf->hwaddress.type == GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET) { if (udph->chksum) { @@ -257,18 +257,25 @@ "Expected %x, got %x\n", grub_be_to_cpu16 (expected), grub_be_to_cpu16 (chk)); - grub_netbuff_free (nb); - return GRUB_ERR_NONE; + break; } udph->chksum = chk; } err = grub_netbuff_pull (nb, sizeof (*udph)); if (err) - return err; - grub_net_process_dhcp (nb, inf->card); - grub_netbuff_free (nb); - return GRUB_ERR_NONE; + { + grub_netbuff_free (nb); + return err; + } + struct grub_net_bootp_packet *dhcp = + (struct grub_net_bootp_packet *) nb->data; + if (grub_memcmp(inf->hwaddress.mac, &dhcp->mac_addr, + sizeof(inf->hwaddress.mac)) == 0) + { + grub_net_process_dhcp (nb, inf->card); + break; + } } grub_netbuff_free (nb); return GRUB_ERR_NONE; @@ -344,19 +351,34 @@ } grub_free (rsm->asm_buffer); grub_priority_queue_destroy (rsm->pq); + grub_free (rsm); } static void free_old_fragments (void) { - struct reassemble *rsm, **prev; + struct reassemble *rsm, **prev, *tmp; grub_uint64_t limit_time = grub_get_time_ms () - 90000; - for (prev = &reassembles, rsm = *prev; rsm; prev = &rsm->next, rsm = *prev) + for (prev = &reassembles, rsm = *prev; rsm; + prev = &rsm->next, rsm = *prev, free_rsm (tmp)) if (rsm->last_time < limit_time) { *prev = rsm->next; - free_rsm (rsm); + tmp = rsm; + } +} + +void +grub_free_fragments (void) +{ + struct reassemble *rsm, **prev, *tmp; + + for (prev = &reassembles, rsm = *prev; rsm; + prev = &rsm->next, rsm = *prev, free_rsm (tmp)) + { + *prev = rsm->next; + tmp = rsm; } } @@ -570,9 +592,14 @@ dest.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4; dest.ipv4 = dst; - return handle_dgram (ret, card, src_hwaddress, - hwaddress, proto, &source, &dest, - ttl); + { + grub_err_t result; + result = handle_dgram (ret, card, src_hwaddress, + hwaddress, proto, &source, &dest, + ttl); + grub_free (ret); + return result; + } } } === modified file 'grub-core/net/tftp.c' --- grub-core/net/tftp.c 2012-02-12 18:11:06 +0000 +++ grub-core/net/tftp.c 2012-05-01 17:22:35 +0000 @@ -320,9 +320,9 @@ rrqlen += grub_strlen ("blksize") + 1; rrq += grub_strlen ("blksize") + 1; - grub_strcpy (rrq, "1024"); - rrqlen += grub_strlen ("1024") + 1; - rrq += grub_strlen ("1024") + 1; + grub_strcpy (rrq, "4096"); + rrqlen += grub_strlen ("4096") + 1; + rrq += grub_strlen ("4096") + 1; grub_strcpy (rrq, "tsize"); rrqlen += grub_strlen ("tsize") + 1;