In recv_hook(), *data->addresses is freed without being set to NULL.
Since *data->addresses can be cached in dns_cache[h].addresses, this
can lead to UAF or double free if dns_cache[h].addresses is accessed
or cleared later.
The fix sets *data->addresses to NULL after freeing to avoid dangling
pointer.
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub_netbuff_free (nb);
grub_free (redirect_save);
if (!*data->naddresses)
- grub_free (*data->addresses);
+ {
+ grub_free (*data->addresses);
+ *data->addresses = NULL;
+ }
return GRUB_ERR_NONE;
}