]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev-event: check whether device has devnum before calling udev_node_remove()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 29 Oct 2018 03:38:40 +0000 (12:38 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 31 Oct 2018 00:29:51 +0000 (09:29 +0900)
This fixes a bug in 'remove' event handling, which was introduced by
eb1f9e30ec603ab34631cc3adba1def49485b505, as 'devnum' variable may
not be initialized.

src/udev/udev-event.c

index 70fb190897d519e3a1f1b9412629bd71e0fdf678..e044adedc320f2643b3141613c556a43b744822e 100644 (file)
@@ -782,7 +782,6 @@ static void event_execute_rules_on_remove(
                 struct udev_rules *rules) {
 
         sd_device *dev = event->dev->device;
-        dev_t devnum;
         int r;
 
         r = device_read_db_force(dev);
@@ -797,18 +796,14 @@ static void event_execute_rules_on_remove(
         if (r < 0)
                 log_device_debug_errno(dev, r, "Failed to delete database under /run/udev/data/, ignoring: %m");
 
-        r = sd_device_get_devnum(dev, &devnum);
-        if (r < 0) {
-                if (r != -ENOENT)
-                        log_device_debug_errno(dev, r, "Failed to get devnum, ignoring: %m");
-        } else
+        if (sd_device_get_devnum(dev, NULL) >= 0)
                 (void) udev_watch_end(dev);
 
         (void) udev_rules_apply_to_event(rules, event,
                                          timeout_usec, timeout_warn_usec,
                                          properties_list);
 
-        if (major(devnum) > 0)
+        if (sd_device_get_devnum(dev, NULL) >= 0)
                 (void) udev_node_remove(dev);
 }