From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: B Horn Date: Fri, 1 Nov 2024 23:49:48 +0000 Subject: [PATCH] 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 Reviewed-by: Daniel Kiper --- grub-core/net/net.c | 34 ++++++++++++++++++++++++++++++++++ include/grub/net.h | 11 +---------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/grub-core/net/net.c b/grub-core/net/net.c index c78c8694b..69223164d 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -1051,6 +1051,40 @@ grub_net_add_ipv6_local (struct grub_net_network_level_interface *inter, return 0; } +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, int mask) diff --git a/include/grub/net.h b/include/grub/net.h index 0d31f0066..4a815fa91 100644 --- a/include/grub/net.h +++ b/include/grub/net.h @@ -607,16 +607,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);