mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
efi_loader: fix handling of DHCP acknowledge
The dhcp command may be executed after the first UEFI command. We should still update the EFI_PXE_BASE_CODE_PROTOCOL. Don't leak content of prior acknowledge packages. Handle failing allocation when calling malloc(). Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
f2833d451c
commit
1702055eb3
1 changed files with 10 additions and 3 deletions
|
@ -30,6 +30,7 @@ static uchar **receive_buffer;
|
|||
static size_t *receive_lengths;
|
||||
static int rx_packet_idx;
|
||||
static int rx_packet_num;
|
||||
static struct efi_net_obj *netobj;
|
||||
|
||||
/*
|
||||
* The notification function of this event is called in every timer cycle
|
||||
|
@ -660,10 +661,16 @@ void efi_net_set_dhcp_ack(void *pkt, int len)
|
|||
{
|
||||
int maxsize = sizeof(*dhcp_ack);
|
||||
|
||||
if (!dhcp_ack)
|
||||
if (!dhcp_ack) {
|
||||
dhcp_ack = malloc(maxsize);
|
||||
|
||||
if (!dhcp_ack)
|
||||
return;
|
||||
}
|
||||
memset(dhcp_ack, 0, maxsize);
|
||||
memcpy(dhcp_ack, pkt, min(len, maxsize));
|
||||
|
||||
if (netobj)
|
||||
netobj->pxe_mode.dhcp_ack = *dhcp_ack;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -853,7 +860,6 @@ static efi_status_t EFIAPI efi_pxe_base_code_set_packets(
|
|||
*/
|
||||
efi_status_t efi_net_register(void)
|
||||
{
|
||||
struct efi_net_obj *netobj = NULL;
|
||||
efi_status_t r;
|
||||
int i;
|
||||
|
||||
|
@ -982,6 +988,7 @@ failure_to_add_protocol:
|
|||
return r;
|
||||
out_of_resources:
|
||||
free(netobj);
|
||||
netobj = NULL;
|
||||
free(transmit_buffer);
|
||||
if (receive_buffer)
|
||||
for (i = 0; i < ETH_PACKETS_BATCH_RECV; i++)
|
||||
|
|
Loading…
Reference in a new issue