From: Yu Watanabe Date: Mon, 31 Oct 2022 01:25:50 +0000 (+0900) Subject: wait-online: check received interface name X-Git-Tag: v253-rc1~614^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0d7e58038e3eaaeb28ff82b8b504d8780c736fe7;p=thirdparty%2Fsystemd.git wait-online: check received interface name --- diff --git a/src/network/wait-online/link.c b/src/network/wait-online/link.c index f379578355c..287a91648d1 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);