=== modified file 'grub-core/net/drivers/efi/efinet.c' --- grub-core/net/drivers/efi/efinet.c 2012-04-29 16:43:22 +0000 +++ grub-core/net/drivers/efi/efinet.c 2012-05-03 19:35:35 +0000 @@ -54,6 +54,8 @@ } } +struct grub_net_buff *saved_nb; + static struct grub_net_buff * get_card_packet (const struct grub_net_card *dev) { @@ -63,9 +65,18 @@ grub_efi_uintn_t bufsize = 1536; struct grub_net_buff *nb; - nb = grub_netbuff_alloc (bufsize + 2); - if (!nb) - return NULL; + if (saved_nb) + { + nb = saved_nb; + grub_netbuff_clear (nb); + saved_nb = NULL; + } + else + { + nb = grub_netbuff_alloc (bufsize + 2); + if (!nb) + return NULL; + } /* Reserve 2 bytes so that 2 + 14/18 bytes of ethernet header is divisible by 4. So that IP header is aligned on 4 bytes. */ @@ -100,13 +111,13 @@ } if (st != GRUB_EFI_SUCCESS) { - grub_netbuff_free (nb); + saved_nb = nb; return NULL; } err = grub_netbuff_put (nb, bufsize); if (err) { - grub_netbuff_free (nb); + saved_nb = nb; return NULL; } @@ -234,6 +245,9 @@ { struct grub_net_card *card, *next; + if (saved_nb) + grub_netbuff_free (saved_nb); + FOR_NET_CARDS_SAFE (card, next) if (card->driver == &efidriver) grub_net_card_unregister (card); === 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-03 19:13:03 +0000 @@ -27,6 +27,7 @@ #include #include #include +#include GRUB_MOD_LICENSE ("GPLv3+"); @@ -288,6 +293,7 @@ grub_err_t err; grub_uint8_t *nbd; grub_net_network_level_address_t addr; + const char *tftp_block_size; data = grub_zalloc (sizeof (*data)); if (!data) @@ -320,9 +326,12 @@ rrqlen += grub_strlen ("blksize") + 1; rrq += grub_strlen ("blksize") + 1; - grub_strcpy (rrq, "1024"); - rrqlen += grub_strlen ("1024") + 1; - rrq += grub_strlen ("1024") + 1; + tftp_block_size = grub_env_get ("tftp_block_size"); + if (tftp_block_size == NULL) + tftp_block_size = "4096"; + grub_strcpy (rrq, tftp_block_size); + rrqlen += grub_strlen (tftp_block_size) + 1; + rrq += grub_strlen (tftp_block_size) + 1; grub_strcpy (rrq, "tsize"); rrqlen += grub_strlen ("tsize") + 1;