A UAF occurs in grub_net_network_level_interface_unregister()
when inter->name is accessed after being freed in grub_cmd_bootp().
Fix it by deferring grub_free(ifaces[j].name) until after
grub_net_network_level_interface_unregister() completes.
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
err = GRUB_ERR_NONE;
for (j = 0; j < ncards; j++)
{
- grub_free (ifaces[j].name);
if (!ifaces[j].prev)
- continue;
+ {
+ grub_free (ifaces[j].name);
+ continue;
+ }
grub_error_push ();
grub_net_network_level_interface_unregister (&ifaces[j]);
err = grub_error (GRUB_ERR_FILE_NOT_FOUND,
N_("couldn't autoconfigure %s"),
ifaces[j].card->name);
+ grub_free (ifaces[j].name);
}
grub_free (ifaces);