avoid throwing data away on pxefs_open. Reported by : Seth Goldberg
This commit is contained in:
parent
dc5aeea5b9
commit
3bce4450b3
1 changed files with 17 additions and 9 deletions
|
@ -117,7 +117,7 @@ grub_pxefs_open (struct grub_file *file, const char *name)
|
||||||
struct grub_pxe_data *data;
|
struct grub_pxe_data *data;
|
||||||
grub_file_t file_int, bufio;
|
grub_file_t file_int, bufio;
|
||||||
|
|
||||||
data = grub_malloc (sizeof (*data));
|
data = grub_zalloc (sizeof (*data) + grub_strlen (name) + 1);
|
||||||
if (!data)
|
if (!data)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
|
@ -135,7 +135,10 @@ grub_pxefs_open (struct grub_file *file, const char *name)
|
||||||
err = grub_net_resolve_address (file->device->net->name
|
err = grub_net_resolve_address (file->device->net->name
|
||||||
+ sizeof ("pxe,") - 1, &addr);
|
+ sizeof ("pxe,") - 1, &addr);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
{
|
||||||
|
grub_free (data);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -144,7 +147,10 @@ grub_pxefs_open (struct grub_file *file, const char *name)
|
||||||
}
|
}
|
||||||
err = grub_net_route_address (addr, &gateway, &interf);
|
err = grub_net_route_address (addr, &gateway, &interf);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
{
|
||||||
|
grub_free (data);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
data->server_ip = addr.ipv4;
|
data->server_ip = addr.ipv4;
|
||||||
data->gateway_ip = gateway.ipv4;
|
data->gateway_ip = gateway.ipv4;
|
||||||
}
|
}
|
||||||
|
@ -160,7 +166,10 @@ grub_pxefs_open (struct grub_file *file, const char *name)
|
||||||
grub_strcpy ((char *)&c.c1.filename[0], name);
|
grub_strcpy ((char *)&c.c1.filename[0], name);
|
||||||
grub_pxe_call (GRUB_PXENV_TFTP_GET_FSIZE, &c.c1, pxe_rm_entry);
|
grub_pxe_call (GRUB_PXENV_TFTP_GET_FSIZE, &c.c1, pxe_rm_entry);
|
||||||
if (c.c1.status)
|
if (c.c1.status)
|
||||||
return grub_error (GRUB_ERR_FILE_NOT_FOUND, "file not found");
|
{
|
||||||
|
grub_free (data);
|
||||||
|
return grub_error (GRUB_ERR_FILE_NOT_FOUND, "file not found");
|
||||||
|
}
|
||||||
|
|
||||||
file->size = c.c1.file_size;
|
file->size = c.c1.file_size;
|
||||||
|
|
||||||
|
@ -168,11 +177,10 @@ grub_pxefs_open (struct grub_file *file, const char *name)
|
||||||
c.c2.packet_size = grub_pxe_blksize;
|
c.c2.packet_size = grub_pxe_blksize;
|
||||||
grub_pxe_call (GRUB_PXENV_TFTP_OPEN, &c.c2, pxe_rm_entry);
|
grub_pxe_call (GRUB_PXENV_TFTP_OPEN, &c.c2, pxe_rm_entry);
|
||||||
if (c.c2.status)
|
if (c.c2.status)
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "open fails");
|
{
|
||||||
|
grub_free (data);
|
||||||
data = grub_zalloc (sizeof (struct grub_pxe_data) + grub_strlen (name) + 1);
|
return grub_error (GRUB_ERR_BAD_FS, "open fails");
|
||||||
if (! data)
|
}
|
||||||
return grub_errno;
|
|
||||||
|
|
||||||
data->block_size = c.c2.packet_size;
|
data->block_size = c.c2.packet_size;
|
||||||
grub_strcpy (data->filename, name);
|
grub_strcpy (data->filename, name);
|
||||||
|
|
Loading…
Reference in a new issue