From 0d7e58038e3eaaeb28ff82b8b504d8780c736fe7 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 31 Oct 2022 10:25:50 +0900 Subject: [PATCH] wait-online: check received interface name --- src/network/wait-online/link.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/network/wait-online/link.c b/src/network/wait-online/link.c index f379578355..287a91648d 100644 --- a/src/network/wait-online/link.c +++ b/src/network/wait-online/link.c @@ -64,6 +64,7 @@ Link *link_free(Link *l) { } static int link_update_name(Link *l, sd_netlink_message *m) { + char ifname_from_index[IF_NAMESIZE]; const char *ifname; int r; @@ -81,6 +82,18 @@ static int link_update_name(Link *l, sd_netlink_message *m) { if (streq(ifname, l->ifname)) return 0; + /* The kernel sometimes sends wrong ifname change. Let's confirm the received name. */ + r = format_ifname(l->ifindex, ifname_from_index); + if (r < 0) + return r; + + if (!streq(ifname, ifname_from_index)) { + log_link_debug(l, "New interface name '%s' received from the kernel does not correspond " + "with the name currently configured on the actual interface '%s'. Ignoring.", + ifname, ifname_from_index); + return 0; + } + hashmap_remove(l->manager->links_by_name, l->ifname); r = free_and_strdup(&l->ifname, ifname); -- 2.25.1