net: Remove variables hooks when interface is unregisted

The grub_net_network_level_interface_unregister(), previously
implemented in a header, did not remove the variables hooks that
were registered in grub_net_network_level_interface_register().
Fix this by implementing the same logic used to register the
variables and move the function into the grub-core/net/net.c.

Signed-off-by: B Horn <b@horn.uk>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
B Horn 2024-11-01 23:49:48 +00:00 committed by Daniel Kiper
parent a1dd8e59da
commit aa8b4d7fac
2 changed files with 33 additions and 10 deletions

View File

@ -984,6 +984,38 @@ grub_net_network_level_interface_register (struct grub_net_network_level_interfa
grub_net_network_level_interfaces = inter;
}
void
grub_net_network_level_interface_unregister (struct grub_net_network_level_interface *inter)
{
char *name;
{
char buf[GRUB_NET_MAX_STR_HWADDR_LEN];
grub_net_hwaddr_to_str (&inter->hwaddress, buf);
name = grub_xasprintf ("net_%s_mac", inter->name);
if (name != NULL)
grub_register_variable_hook (name, NULL, NULL);
grub_free (name);
}
{
char buf[GRUB_NET_MAX_STR_ADDR_LEN];
grub_net_addr_to_str (&inter->address, buf);
name = grub_xasprintf ("net_%s_ip", inter->name);
if (name != NULL)
grub_register_variable_hook (name, NULL, NULL);
grub_free (name);
}
inter->card->num_ifaces--;
*inter->prev = inter->next;
if (inter->next)
inter->next->prev = inter->prev;
inter->next = 0;
inter->prev = 0;
}
grub_err_t
grub_net_add_ipv4_local (struct grub_net_network_level_interface *inter,

View File

@ -540,16 +540,7 @@ void grub_bootp_fini (void);
void grub_dns_init (void);
void grub_dns_fini (void);
static inline void
grub_net_network_level_interface_unregister (struct grub_net_network_level_interface *inter)
{
inter->card->num_ifaces--;
*inter->prev = inter->next;
if (inter->next)
inter->next->prev = inter->prev;
inter->next = 0;
inter->prev = 0;
}
void grub_net_network_level_interface_unregister (struct grub_net_network_level_interface *inter);
void
grub_net_tcp_retransmit (void);