From d4a95a952e47d6ab959694114eccc838a0b31529 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 29 Oct 2018 12:38:40 +0900 Subject: [PATCH 1/4] udev-event: check whether device has devnum before calling udev_node_remove() 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 | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 70fb190897..e044adedc3 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -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); } From 7af1c7808bb64941416e4f618bfa1ed40ab5eff9 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 29 Oct 2018 22:45:14 +0900 Subject: [PATCH 2/4] udev-event: do not store unused devnum --- src/udev/udev-event.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index e044adedc3..65f66cd130 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -727,11 +727,10 @@ static int rename_netif(struct udev_event *event) { static int update_devnode(struct udev_event *event) { sd_device *dev = event->dev->device; const char *action; - dev_t devnum; bool apply; int r; - r = sd_device_get_devnum(dev, &devnum); + r = sd_device_get_devnum(dev, NULL); if (r == -ENOENT) return 0; if (r < 0) @@ -814,7 +813,6 @@ int udev_event_execute_rules(struct udev_event *event, _cleanup_(sd_device_unrefp) sd_device *clone = NULL; sd_device *dev = event->dev->device; const char *subsystem, *action; - dev_t devnum; int r; assert(event); @@ -842,7 +840,7 @@ int udev_event_execute_rules(struct udev_event *event, if (!event->dev_db) return -ENOMEM; - r = sd_device_get_devnum(dev, &devnum); + r = sd_device_get_devnum(dev, NULL); if (r < 0) { if (r != -ENOENT) log_device_debug_errno(dev, r, "Failed to get devnum, ignoring: %m"); From 4375dab58ddba8a8e763143db3815a99e23e4da3 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 29 Oct 2018 22:37:14 +0900 Subject: [PATCH 3/4] udev-event: fix timeout log messages Follow-up for e81c3a4c5fbbea89fe6c1e3d0ace669b8130aa92. --- src/udev/udev-event.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 65f66cd130..a0f6a5daa4 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -475,26 +475,26 @@ static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userd static int on_spawn_timeout(sd_event_source *s, uint64_t usec, void *userdata) { Spawn *spawn = userdata; - char timeout[FORMAT_TIMESTAMP_RELATIVE_MAX]; + char timeout[FORMAT_TIMESPAN_MAX]; assert(spawn); kill_and_sigcont(spawn->pid, SIGKILL); log_error("Spawned process '%s' ["PID_FMT"] timed out after %s, killing", spawn->cmd, spawn->pid, - format_timestamp_relative(timeout, sizeof(timeout), spawn->timeout_usec)); + format_timespan(timeout, sizeof(timeout), spawn->timeout_usec, USEC_PER_SEC)); return 1; } static int on_spawn_timeout_warning(sd_event_source *s, uint64_t usec, void *userdata) { Spawn *spawn = userdata; - char timeout[FORMAT_TIMESTAMP_RELATIVE_MAX]; + char timeout[FORMAT_TIMESPAN_MAX]; assert(spawn); log_warning("Spawned process '%s' ["PID_FMT"] is taking longer than %s to complete", spawn->cmd, spawn->pid, - format_timestamp_relative(timeout, sizeof(timeout), spawn->timeout_warn_usec)); + format_timespan(timeout, sizeof(timeout), spawn->timeout_warn_usec, USEC_PER_SEC)); return 1; } From fbd0aea17ea272bae8d52b2e0a1f0a6ead7f5a2f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 29 Oct 2018 22:57:38 +0900 Subject: [PATCH 4/4] dissect: do not store unused devnum --- src/shared/dissect-image.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index 710507ed5c..7841f4a359 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -281,9 +281,7 @@ int dissect_image( /* Count the partitions enumerated by the kernel */ n = 0; FOREACH_DEVICE(e, q) { - dev_t qn; - - if (sd_device_get_devnum(q, &qn) < 0) + if (sd_device_get_devnum(q, NULL) < 0) continue; if (!device_is_block(q))