From: Yu Watanabe Date: Sun, 24 Oct 2021 11:43:34 +0000 (+0900) Subject: udev: do not try to rename interface if it is already up X-Git-Tag: v250-rc1~432 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6681eb021a0b56ef0dc849e3b358a515ece16482;p=thirdparty%2Fsystemd.git udev: do not try to rename interface if it is already up See dev_change_name() in kernel's net/core/dev.c. Fixes #21105. --- diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 0d98b078874..1c666d01231 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -827,6 +827,7 @@ int udev_event_spawn(UdevEvent *event, static int rename_netif(UdevEvent *event) { sd_device *dev = event->dev; const char *oldname; + unsigned flags; int ifindex, r; if (!event->name) @@ -854,6 +855,16 @@ static int rename_netif(UdevEvent *event) { return 0; } + r = rtnl_get_link_info(&event->rtnl, ifindex, NULL, &flags); + if (r < 0) + return log_device_warning_errno(dev, r, "Failed to get link flags: %m"); + + if (FLAGS_SET(flags, IFF_UP)) { + log_device_info(dev, "Network interface '%s' is already up, refusing to rename to '%s'.", + oldname, event->name); + return 0; + } + /* Set ID_RENAMING boolean property here, and drop it in the corresponding move uevent later. */ r = device_add_property(dev, "ID_RENAMING", "1"); if (r < 0)