From 8ecbc4b880b91e997babc924fccb7cbebb8b0943 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 11 Nov 2018 23:33:17 +0900 Subject: [PATCH 1/2] libudev: conserve previous behavior The commit dcfbde3a43d632ff6e286c77e1081087eca59d8e changes sd_device_get_ifindex() returns -ENOENT instead of zero if the device does not have ifindex. Let's keep the original behavior of udev_device_get_ifindex(). Fixes #10699. --- src/libudev/libudev-device-private.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libudev/libudev-device-private.c b/src/libudev/libudev-device-private.c index a7868a11cb..70b00c1498 100644 --- a/src/libudev/libudev-device-private.c +++ b/src/libudev/libudev-device-private.c @@ -52,6 +52,8 @@ int udev_device_get_ifindex(struct udev_device *udev_device) { assert(udev_device); r = sd_device_get_ifindex(udev_device->device, &ifindex); + if (r == -ENOENT) + return 0; if (r < 0) return r; From edc81c1ccb9542b2d179e1f88afaa3d51636624d Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 12 Nov 2018 13:07:06 +0900 Subject: [PATCH 2/2] udevd: do not treat negative value as valid ifindex Also, some conditions in is_devpath_busy() are similified. --- src/udev/udevd.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 0757628d0d..2664c8475e 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -653,11 +653,11 @@ static bool is_devpath_busy(Manager *manager, struct event *event) { return true; /* check network device ifindex */ - if (event->ifindex != 0 && event->ifindex == loop_event->ifindex) + if (event->ifindex > 0 && event->ifindex == loop_event->ifindex) return true; /* check our old name */ - if (event->devpath_old != NULL && streq(loop_event->devpath, event->devpath_old)) { + if (event->devpath_old && streq(loop_event->devpath, event->devpath_old)) { event->delaying_seqnum = loop_event->seqnum; return true; } @@ -672,9 +672,7 @@ static bool is_devpath_busy(Manager *manager, struct event *event) { /* identical device event found */ if (loop_event->devpath_len == event->devpath_len) { /* devices names might have changed/swapped in the meantime */ - if (major(event->devnum) != 0 && (event->devnum != loop_event->devnum || event->is_block != loop_event->is_block)) - continue; - if (event->ifindex != 0 && event->ifindex != loop_event->ifindex) + if (major(event->devnum) != 0 || event->ifindex > 0) continue; event->delaying_seqnum = loop_event->seqnum; return true; @@ -691,9 +689,6 @@ static bool is_devpath_busy(Manager *manager, struct event *event) { event->delaying_seqnum = loop_event->seqnum; return true; } - - /* no matching device */ - continue; } return false;