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 authored and Daniel Kiper committed 2025-01-23 16:22:48 +01:00
1 parent a1dd8e59da
commit aa8b4d7fac
2 files changed
+33 -10

No files matched your search

+32
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,
+1 -10
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);