From: Yu Watanabe Date: Sat, 6 Mar 2021 08:02:11 +0000 (+0900) Subject: udev: also propagate error in udev_rules_apply_to_event() on remove event X-Git-Tag: v249-rc1~315^2~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4cac2260c8ef6a324c95461888c02db32f6c1eb2;p=thirdparty%2Fsystemd.git udev: also propagate error in udev_rules_apply_to_event() on remove event When udev rules are not applied correctly, then run program lists is not perfect. So, udev_event_execute_run() later in worker_process_device() should not be called. --- diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 40a4130f8f1..2e82be6fb39 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -911,7 +911,7 @@ static int update_devnode(UdevEvent *event) { return udev_node_add(dev, apply_mac, event->mode, event->uid, event->gid, event->seclabel_list); } -static void event_execute_rules_on_remove( +static int event_execute_rules_on_remove( UdevEvent *event, int inotify_fd, usec_t timeout_usec, @@ -937,10 +937,12 @@ static void event_execute_rules_on_remove( if (sd_device_get_devnum(dev, NULL) >= 0) (void) udev_watch_end(inotify_fd, dev); - (void) udev_rules_apply_to_event(rules, event, timeout_usec, timeout_signal, properties_list); + r = udev_rules_apply_to_event(rules, event, timeout_usec, timeout_signal, properties_list); if (sd_device_get_devnum(dev, NULL) >= 0) (void) udev_node_remove(dev); + + return r; } static int udev_event_on_move(sd_device *dev) { @@ -993,10 +995,8 @@ int udev_event_execute_rules( if (r < 0) return log_device_error_errno(dev, r, "Failed to get ACTION: %m"); - if (action == SD_DEVICE_REMOVE) { - event_execute_rules_on_remove(event, inotify_fd, timeout_usec, timeout_signal, properties_list, rules); - return 0; - } + if (action == SD_DEVICE_REMOVE) + return event_execute_rules_on_remove(event, inotify_fd, timeout_usec, timeout_signal, properties_list, rules); r = device_clone_with_db(dev, &event->dev_db_clone); if (r < 0)