1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Copyright © 2004 Chris Friesen <chris_friesen@sympatico.ca>
4 * Copyright © 2009 Canonical Ltd.
5 * Copyright © 2009 Scott James Remnant <scott@netsplit.com>
15 #include <sys/epoll.h>
17 #include <sys/inotify.h>
18 #include <sys/ioctl.h>
19 #include <sys/mount.h>
20 #include <sys/prctl.h>
21 #include <sys/signalfd.h>
27 #include "sd-daemon.h"
30 #include "alloc-util.h"
31 #include "cgroup-setup.h"
32 #include "cgroup-util.h"
33 #include "cpu-set-util.h"
34 #include "dev-setup.h"
35 #include "device-monitor-private.h"
36 #include "device-private.h"
37 #include "device-util.h"
38 #include "errno-list.h"
39 #include "event-util.h"
42 #include "format-util.h"
45 #include "inotify-util.h"
47 #include "limits-util.h"
49 #include "main-func.h"
51 #include "netlink-util.h"
52 #include "parse-util.h"
53 #include "path-util.h"
54 #include "pretty-print.h"
55 #include "proc-cmdline.h"
56 #include "process-util.h"
57 #include "selinux-util.h"
58 #include "signal-util.h"
59 #include "socket-util.h"
60 #include "string-util.h"
63 #include "syslog-util.h"
65 #include "udev-builtin.h"
66 #include "udev-ctrl.h"
67 #include "udev-event.h"
68 #include "udev-util.h"
69 #include "udev-watch.h"
70 #include "user-util.h"
73 #define WORKER_NUM_MAX 2048U
74 #define EVENT_RETRY_INTERVAL_USEC (200 * USEC_PER_MSEC)
75 #define EVENT_RETRY_TIMEOUT_USEC (3 * USEC_PER_MINUTE)
77 static bool arg_debug
= false;
78 static int arg_daemonize
= false;
79 static ResolveNameTiming arg_resolve_name_timing
= RESOLVE_NAME_EARLY
;
80 static unsigned arg_children_max
= 0;
81 static usec_t arg_exec_delay_usec
= 0;
82 static usec_t arg_event_timeout_usec
= 180 * USEC_PER_SEC
;
83 static int arg_timeout_signal
= SIGKILL
;
84 static bool arg_blockdev_read_only
= false;
86 typedef struct Event Event
;
87 typedef struct Worker Worker
;
89 typedef struct Manager
{
92 LIST_HEAD(Event
, events
);
94 pid_t pid
; /* the process that originally allocated the manager object */
102 sd_device_monitor
*monitor
;
106 /* used by udev-watch */
108 sd_event_source
*inotify_event
;
110 sd_event_source
*kill_workers_event
;
114 bool stop_exec_queue
;
118 typedef enum EventState
{
124 typedef struct Event
{
131 sd_device_action_t action
;
133 uint64_t blocker_seqnum
;
134 usec_t retry_again_next_usec
;
135 usec_t retry_again_timeout_usec
;
137 sd_event_source
*timeout_warning_event
;
138 sd_event_source
*timeout_event
;
140 LIST_FIELDS(Event
, event
);
143 typedef enum WorkerState
{
151 typedef struct Worker
{
154 sd_event_source
*child_event_source
;
155 sd_device_monitor
*monitor
;
160 /* passed from worker to main process */
161 typedef enum EventResult
{
162 EVENT_RESULT_NERRNO_MIN
= -ERRNO_MAX
,
163 EVENT_RESULT_NERRNO_MAX
= -1,
164 EVENT_RESULT_SUCCESS
= 0,
165 EVENT_RESULT_EXIT_STATUS_BASE
= 0,
166 EVENT_RESULT_EXIT_STATUS_MAX
= 255,
167 EVENT_RESULT_TRY_AGAIN
= 256, /* when the block device is locked by another process. */
168 EVENT_RESULT_SIGNAL_BASE
= 257,
169 EVENT_RESULT_SIGNAL_MAX
= EVENT_RESULT_SIGNAL_BASE
+ _NSIG
,
171 _EVENT_RESULT_INVALID
= -EINVAL
,
174 static Event
*event_free(Event
*event
) {
178 assert(event
->manager
);
180 LIST_REMOVE(event
, event
->manager
->events
, event
);
181 sd_device_unref(event
->dev
);
183 /* Do not use sd_event_source_disable_unref() here, as this is called by both workers and the
185 sd_event_source_unref(event
->timeout_warning_event
);
186 sd_event_source_unref(event
->timeout_event
);
189 event
->worker
->event
= NULL
;
194 static void event_queue_cleanup(Manager
*manager
, EventState match_state
) {
195 LIST_FOREACH(event
, event
, manager
->events
) {
196 if (match_state
!= EVENT_UNDEF
&& match_state
!= event
->state
)
203 static Worker
*worker_free(Worker
*worker
) {
208 hashmap_remove(worker
->manager
->workers
, PID_TO_PTR(worker
->pid
));
210 sd_event_source_unref(worker
->child_event_source
);
211 sd_device_monitor_unref(worker
->monitor
);
212 event_free(worker
->event
);
214 return mfree(worker
);
217 DEFINE_TRIVIAL_CLEANUP_FUNC(Worker
*, worker_free
);
218 DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(worker_hash_op
, void, trivial_hash_func
, trivial_compare_func
, Worker
, worker_free
);
220 static void manager_clear_for_worker(Manager
*manager
) {
223 /* Do not use sd_event_source_disable_unref() here, as this is called by both workers and the
225 manager
->inotify_event
= sd_event_source_unref(manager
->inotify_event
);
226 manager
->kill_workers_event
= sd_event_source_unref(manager
->kill_workers_event
);
228 manager
->event
= sd_event_unref(manager
->event
);
230 manager
->workers
= hashmap_free(manager
->workers
);
231 event_queue_cleanup(manager
, EVENT_UNDEF
);
233 manager
->monitor
= sd_device_monitor_unref(manager
->monitor
);
234 manager
->ctrl
= udev_ctrl_unref(manager
->ctrl
);
236 manager
->worker_watch
[READ_END
] = safe_close(manager
->worker_watch
[READ_END
]);
239 static Manager
* manager_free(Manager
*manager
) {
245 manager_clear_for_worker(manager
);
247 sd_netlink_unref(manager
->rtnl
);
249 hashmap_free_free_free(manager
->properties
);
250 udev_rules_free(manager
->rules
);
252 safe_close(manager
->inotify_fd
);
253 safe_close_pair(manager
->worker_watch
);
255 free(manager
->cgroup
);
256 return mfree(manager
);
259 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager
*, manager_free
);
261 static int on_sigchld(sd_event_source
*s
, const siginfo_t
*si
, void *userdata
);
263 static int worker_new(Worker
**ret
, Manager
*manager
, sd_device_monitor
*worker_monitor
, pid_t pid
) {
264 _cleanup_(worker_freep
) Worker
*worker
= NULL
;
269 assert(worker_monitor
);
272 /* close monitor, but keep address around */
273 device_monitor_disconnect(worker_monitor
);
275 worker
= new(Worker
, 1);
280 .monitor
= sd_device_monitor_ref(worker_monitor
),
284 r
= sd_event_add_child(manager
->event
, &worker
->child_event_source
, pid
, WEXITED
, on_sigchld
, worker
);
288 r
= hashmap_ensure_put(&manager
->workers
, &worker_hash_op
, PID_TO_PTR(pid
), worker
);
292 worker
->manager
= manager
;
294 *ret
= TAKE_PTR(worker
);
298 static void manager_kill_workers(Manager
*manager
, bool force
) {
303 HASHMAP_FOREACH(worker
, manager
->workers
) {
304 if (worker
->state
== WORKER_KILLED
)
307 if (worker
->state
== WORKER_RUNNING
&& !force
) {
308 worker
->state
= WORKER_KILLING
;
312 worker
->state
= WORKER_KILLED
;
313 (void) kill(worker
->pid
, SIGTERM
);
317 static void manager_exit(Manager
*manager
) {
320 manager
->exit
= true;
324 "STATUS=Starting shutdown...");
326 /* close sources of new events and discard buffered events */
327 manager
->ctrl
= udev_ctrl_unref(manager
->ctrl
);
329 manager
->inotify_event
= sd_event_source_disable_unref(manager
->inotify_event
);
330 manager
->inotify_fd
= safe_close(manager
->inotify_fd
);
332 manager
->monitor
= sd_device_monitor_unref(manager
->monitor
);
334 /* discard queued events and kill workers */
335 event_queue_cleanup(manager
, EVENT_QUEUED
);
336 manager_kill_workers(manager
, true);
339 static void notify_ready(void) {
342 r
= sd_notifyf(false,
344 "STATUS=Processing with %u children at max", arg_children_max
);
346 log_warning_errno(r
, "Failed to send readiness notification, ignoring: %m");
349 /* reload requested, HUP signal received, rules changed, builtin changed */
350 static void manager_reload(Manager
*manager
) {
355 "STATUS=Flushing configuration...");
357 manager_kill_workers(manager
, false);
358 manager
->rules
= udev_rules_free(manager
->rules
);
364 static int on_kill_workers_event(sd_event_source
*s
, uint64_t usec
, void *userdata
) {
365 Manager
*manager
= userdata
;
369 log_debug("Cleanup idle workers");
370 manager_kill_workers(manager
, false);
375 static void device_broadcast(sd_device_monitor
*monitor
, sd_device
*dev
, EventResult result
) {
380 /* On exit, manager->monitor is already NULL. */
384 if (result
!= EVENT_RESULT_SUCCESS
) {
385 (void) device_add_property(dev
, "UDEV_WORKER_FAILED", "1");
388 case EVENT_RESULT_NERRNO_MIN
... EVENT_RESULT_NERRNO_MAX
: {
391 (void) device_add_propertyf(dev
, "UDEV_WORKER_ERRNO", "%i", -result
);
393 str
= errno_to_name(result
);
395 (void) device_add_property(dev
, "UDEV_WORKER_ERRNO_NAME", str
);
398 case EVENT_RESULT_EXIT_STATUS_BASE
... EVENT_RESULT_EXIT_STATUS_MAX
:
399 (void) device_add_propertyf(dev
, "UDEV_WORKER_EXIT_STATUS", "%i", result
- EVENT_RESULT_EXIT_STATUS_BASE
);
402 case EVENT_RESULT_TRY_AGAIN
:
403 assert_not_reached();
406 case EVENT_RESULT_SIGNAL_BASE
... EVENT_RESULT_SIGNAL_MAX
: {
409 (void) device_add_propertyf(dev
, "UDEV_WORKER_SIGNAL", "%i", result
- EVENT_RESULT_SIGNAL_BASE
);
411 str
= signal_to_string(result
- EVENT_RESULT_SIGNAL_BASE
);
413 (void) device_add_property(dev
, "UDEV_WORKER_SIGNAL_NAME", str
);
417 log_device_warning(dev
, "Unknown event result \"%i\", ignoring.", result
);
421 r
= device_monitor_send_device(monitor
, NULL
, dev
);
423 log_device_warning_errno(dev
, r
,
424 "Failed to broadcast event to libudev listeners, ignoring: %m");
427 static int worker_send_result(Manager
*manager
, EventResult result
) {
429 assert(manager
->worker_watch
[WRITE_END
] >= 0);
431 return loop_write(manager
->worker_watch
[WRITE_END
], &result
, sizeof(result
), false);
434 static int device_get_whole_disk(sd_device
*dev
, sd_device
**ret_device
, const char **ret_devname
) {
440 if (device_for_action(dev
, SD_DEVICE_REMOVE
))
443 r
= sd_device_get_subsystem(dev
, &val
);
445 return log_device_debug_errno(dev
, r
, "Failed to get subsystem: %m");
447 if (!streq(val
, "block"))
450 r
= sd_device_get_sysname(dev
, &val
);
452 return log_device_debug_errno(dev
, r
, "Failed to get sysname: %m");
454 /* Exclude the following devices:
455 * For "dm-", see the comment added by e918a1b5a94f270186dca59156354acd2a596494.
456 * For "md", see the commit message of 2e5b17d01347d3c3118be2b8ad63d20415dbb1f0,
457 * but not sure the assumption is still valid even when partitions are created on the md
458 * devices, surprisingly which seems to be possible, see PR #22973.
459 * For "drbd", see the commit message of fee854ee8ccde0cd28e0f925dea18cce35f3993d. */
460 if (STARTSWITH_SET(val
, "dm-", "md", "drbd"))
463 r
= sd_device_get_devtype(dev
, &val
);
464 if (r
< 0 && r
!= -ENOENT
)
465 return log_device_debug_errno(dev
, r
, "Failed to get devtype: %m");
466 if (r
>= 0 && streq(val
, "partition")) {
467 r
= sd_device_get_parent(dev
, &dev
);
468 if (r
== -ENOENT
) /* The device may be already removed. */
471 return log_device_debug_errno(dev
, r
, "Failed to get parent device: %m");
474 r
= sd_device_get_devname(dev
, &val
);
478 return log_device_debug_errno(dev
, r
, "Failed to get devname: %m");
494 static int worker_lock_whole_disk(sd_device
*dev
, int *ret_fd
) {
495 _cleanup_close_
int fd
= -1;
496 sd_device
*dev_whole_disk
;
503 /* Take a shared lock on the device node; this establishes a concept of device "ownership" to
504 * serialize device access. External processes holding an exclusive lock will cause udev to skip the
505 * event handling; in the case udev acquired the lock, the external process can block until udev has
506 * finished its event handling. */
508 r
= device_get_whole_disk(dev
, &dev_whole_disk
, &val
);
514 fd
= sd_device_open(dev_whole_disk
, O_RDONLY
|O_CLOEXEC
|O_NONBLOCK
);
516 bool ignore
= ERRNO_IS_DEVICE_ABSENT(fd
);
518 log_device_debug_errno(dev
, fd
, "Failed to open '%s'%s: %m", val
, ignore
? ", ignoring" : "");
525 if (flock(fd
, LOCK_SH
|LOCK_NB
) < 0)
526 return log_device_debug_errno(dev
, errno
, "Failed to flock(%s): %m", val
);
528 *ret_fd
= TAKE_FD(fd
);
536 static int worker_mark_block_device_read_only(sd_device
*dev
) {
537 _cleanup_close_
int fd
= -1;
543 if (!arg_blockdev_read_only
)
546 /* Do this only once, when the block device is new. If the device is later retriggered let's not
547 * toggle the bit again, so that people can boot up with full read-only mode and then unset the bit
548 * for specific devices only. */
549 if (!device_for_action(dev
, SD_DEVICE_ADD
))
552 r
= sd_device_get_subsystem(dev
, &val
);
554 return log_device_debug_errno(dev
, r
, "Failed to get subsystem: %m");
556 if (!streq(val
, "block"))
559 r
= sd_device_get_sysname(dev
, &val
);
561 return log_device_debug_errno(dev
, r
, "Failed to get sysname: %m");
563 /* Exclude synthetic devices for now, this is supposed to be a safety feature to avoid modification
564 * of physical devices, and what sits on top of those doesn't really matter if we don't allow the
565 * underlying block devices to receive changes. */
566 if (STARTSWITH_SET(val
, "dm-", "md", "drbd", "loop", "nbd", "zram"))
569 fd
= sd_device_open(dev
, O_RDONLY
|O_CLOEXEC
|O_NONBLOCK
);
571 return log_device_debug_errno(dev
, fd
, "Failed to open '%s', ignoring: %m", val
);
573 if (ioctl(fd
, BLKROSET
, &state
) < 0)
574 return log_device_warning_errno(dev
, errno
, "Failed to mark block device '%s' read-only: %m", val
);
576 log_device_info(dev
, "Successfully marked block device '%s' read-only.", val
);
580 static int worker_process_device(Manager
*manager
, sd_device
*dev
) {
581 _cleanup_(udev_event_freep
) UdevEvent
*udev_event
= NULL
;
582 _cleanup_close_
int fd_lock
= -1;
588 log_device_uevent(dev
, "Processing device");
590 udev_event
= udev_event_new(dev
, arg_exec_delay_usec
, manager
->rtnl
, manager
->log_level
);
594 /* If this is a block device and the device is locked currently via the BSD advisory locks,
595 * someone else is using it exclusively. We don't run our udev rules now to not interfere.
596 * Instead of processing the event, we requeue the event and will try again after a delay.
598 * The user-facing side of this: https://systemd.io/BLOCK_DEVICE_LOCKING */
599 r
= worker_lock_whole_disk(dev
, &fd_lock
);
601 return EVENT_RESULT_TRY_AGAIN
;
605 (void) worker_mark_block_device_read_only(dev
);
607 /* apply rules, create node, symlinks */
608 r
= udev_event_execute_rules(
611 arg_event_timeout_usec
,
618 udev_event_execute_run(udev_event
, arg_event_timeout_usec
, arg_timeout_signal
);
621 /* in case rtnl was initialized */
622 manager
->rtnl
= sd_netlink_ref(udev_event
->rtnl
);
624 r
= udev_event_process_inotify_watch(udev_event
, manager
->inotify_fd
);
628 log_device_uevent(dev
, "Device processed");
632 static int worker_device_monitor_handler(sd_device_monitor
*monitor
, sd_device
*dev
, void *userdata
) {
633 Manager
*manager
= userdata
;
639 r
= worker_process_device(manager
, dev
);
640 if (r
== EVENT_RESULT_TRY_AGAIN
)
641 /* if we couldn't acquire the flock(), then requeue the event */
642 log_device_debug(dev
, "Block device is currently locked, requeueing the event.");
645 log_device_warning_errno(dev
, r
, "Failed to process device, ignoring: %m");
647 /* send processed event back to libudev listeners */
648 device_broadcast(monitor
, dev
, r
);
651 /* send udevd the result of the event execution */
652 r
= worker_send_result(manager
, r
);
654 log_device_warning_errno(dev
, r
, "Failed to send signal to main daemon, ignoring: %m");
656 /* Reset the log level, as it might be changed by "OPTIONS=log_level=". */
657 log_set_max_level(manager
->log_level
);
662 static int worker_main(Manager
*_manager
, sd_device_monitor
*monitor
, sd_device
*first_device
) {
663 _cleanup_(sd_device_unrefp
) sd_device
*dev
= first_device
;
664 _cleanup_(manager_freep
) Manager
*manager
= _manager
;
671 assert_se(unsetenv("NOTIFY_SOCKET") == 0);
673 assert_se(sigprocmask_many(SIG_BLOCK
, NULL
, SIGTERM
, -1) >= 0);
675 /* Reset OOM score, we only protect the main daemon. */
676 r
= set_oom_score_adjust(0);
678 log_debug_errno(r
, "Failed to reset OOM score, ignoring: %m");
680 /* Clear unnecessary data in Manager object. */
681 manager_clear_for_worker(manager
);
683 r
= sd_event_new(&manager
->event
);
685 return log_error_errno(r
, "Failed to allocate event loop: %m");
687 r
= sd_event_add_signal(manager
->event
, NULL
, SIGTERM
, NULL
, NULL
);
689 return log_error_errno(r
, "Failed to set SIGTERM event: %m");
691 r
= sd_device_monitor_attach_event(monitor
, manager
->event
);
693 return log_error_errno(r
, "Failed to attach event loop to device monitor: %m");
695 r
= sd_device_monitor_start(monitor
, worker_device_monitor_handler
, manager
);
697 return log_error_errno(r
, "Failed to start device monitor: %m");
699 (void) sd_event_source_set_description(sd_device_monitor_get_event_source(monitor
), "worker-device-monitor");
701 /* Process first device */
702 (void) worker_device_monitor_handler(monitor
, dev
, manager
);
704 r
= sd_event_loop(manager
->event
);
706 return log_error_errno(r
, "Event loop failed: %m");
711 static int on_event_timeout(sd_event_source
*s
, uint64_t usec
, void *userdata
) {
712 Event
*event
= userdata
;
715 assert(event
->worker
);
717 kill_and_sigcont(event
->worker
->pid
, arg_timeout_signal
);
718 event
->worker
->state
= WORKER_KILLED
;
720 log_device_error(event
->dev
, "Worker ["PID_FMT
"] processing SEQNUM=%"PRIu64
" killed", event
->worker
->pid
, event
->seqnum
);
725 static int on_event_timeout_warning(sd_event_source
*s
, uint64_t usec
, void *userdata
) {
726 Event
*event
= userdata
;
729 assert(event
->worker
);
731 log_device_warning(event
->dev
, "Worker ["PID_FMT
"] processing SEQNUM=%"PRIu64
" is taking a long time", event
->worker
->pid
, event
->seqnum
);
736 static void worker_attach_event(Worker
*worker
, Event
*event
) {
740 assert(worker
->manager
);
742 assert(!event
->worker
);
743 assert(!worker
->event
);
745 worker
->state
= WORKER_RUNNING
;
746 worker
->event
= event
;
747 event
->state
= EVENT_RUNNING
;
748 event
->worker
= worker
;
750 e
= worker
->manager
->event
;
752 (void) sd_event_add_time_relative(e
, &event
->timeout_warning_event
, CLOCK_MONOTONIC
,
753 udev_warn_timeout(arg_event_timeout_usec
), USEC_PER_SEC
,
754 on_event_timeout_warning
, event
);
756 (void) sd_event_add_time_relative(e
, &event
->timeout_event
, CLOCK_MONOTONIC
,
757 arg_event_timeout_usec
, USEC_PER_SEC
,
758 on_event_timeout
, event
);
761 static int worker_spawn(Manager
*manager
, Event
*event
) {
762 _cleanup_(sd_device_monitor_unrefp
) sd_device_monitor
*worker_monitor
= NULL
;
767 /* listen for new events */
768 r
= device_monitor_new_full(&worker_monitor
, MONITOR_GROUP_NONE
, -1);
772 /* allow the main daemon netlink address to send devices to the worker */
773 r
= device_monitor_allow_unicast_sender(worker_monitor
, manager
->monitor
);
775 return log_error_errno(r
, "Worker: Failed to set unicast sender: %m");
777 r
= device_monitor_enable_receiving(worker_monitor
);
779 return log_error_errno(r
, "Worker: Failed to enable receiving of device: %m");
781 r
= safe_fork(NULL
, FORK_DEATHSIG
, &pid
);
783 event
->state
= EVENT_QUEUED
;
784 return log_error_errno(r
, "Failed to fork() worker: %m");
787 DEVICE_TRACE_POINT(worker_spawned
, event
->dev
, getpid());
790 r
= worker_main(manager
, worker_monitor
, sd_device_ref(event
->dev
));
792 _exit(r
< 0 ? EXIT_FAILURE
: EXIT_SUCCESS
);
795 r
= worker_new(&worker
, manager
, worker_monitor
, pid
);
797 return log_error_errno(r
, "Failed to create worker object: %m");
799 worker_attach_event(worker
, event
);
801 log_device_debug(event
->dev
, "Worker ["PID_FMT
"] is forked for processing SEQNUM=%"PRIu64
".", pid
, event
->seqnum
);
805 static int event_run(Event
*event
) {
806 static bool log_children_max_reached
= true;
812 assert(event
->manager
);
814 log_device_uevent(event
->dev
, "Device ready for processing");
816 manager
= event
->manager
;
817 HASHMAP_FOREACH(worker
, manager
->workers
) {
818 if (worker
->state
!= WORKER_IDLE
)
821 r
= device_monitor_send_device(manager
->monitor
, worker
->monitor
, event
->dev
);
823 log_device_error_errno(event
->dev
, r
, "Worker ["PID_FMT
"] did not accept message, killing the worker: %m",
825 (void) kill(worker
->pid
, SIGKILL
);
826 worker
->state
= WORKER_KILLED
;
829 worker_attach_event(worker
, event
);
830 return 1; /* event is now processing. */
833 if (hashmap_size(manager
->workers
) >= arg_children_max
) {
834 /* Avoid spamming the debug logs if the limit is already reached and
835 * many events still need to be processed */
836 if (log_children_max_reached
&& arg_children_max
> 1) {
837 log_debug("Maximum number (%u) of children reached.", hashmap_size(manager
->workers
));
838 log_children_max_reached
= false;
840 return 0; /* no free worker */
843 /* Re-enable the debug message for the next batch of events */
844 log_children_max_reached
= true;
846 /* start new worker and pass initial device */
847 r
= worker_spawn(manager
, event
);
851 return 1; /* event is now processing. */
854 static int event_is_blocked(Event
*event
) {
855 const char *subsystem
, *devpath
, *devpath_old
= NULL
;
856 dev_t devnum
= makedev(0, 0);
857 Event
*loop_event
= NULL
;
862 /* lookup event for identical, parent, child device */
865 assert(event
->manager
);
866 assert(event
->blocker_seqnum
<= event
->seqnum
);
868 if (event
->retry_again_next_usec
> 0) {
871 r
= sd_event_now(event
->manager
->event
, CLOCK_BOOTTIME
, &now_usec
);
875 if (event
->retry_again_next_usec
<= now_usec
)
879 if (event
->blocker_seqnum
== event
->seqnum
)
880 /* we have checked previously and no blocker found */
883 LIST_FOREACH(event
, e
, event
->manager
->events
) {
886 /* we already found a later event, earlier cannot block us, no need to check again */
887 if (loop_event
->seqnum
< event
->blocker_seqnum
)
890 /* event we checked earlier still exists, no need to check again */
891 if (loop_event
->seqnum
== event
->blocker_seqnum
)
894 /* found ourself, no later event can block us */
895 if (loop_event
->seqnum
>= event
->seqnum
)
898 /* found event we have not checked */
903 assert(loop_event
->seqnum
> event
->blocker_seqnum
&&
904 loop_event
->seqnum
< event
->seqnum
);
906 r
= sd_device_get_subsystem(event
->dev
, &subsystem
);
910 is_block
= streq(subsystem
, "block");
912 r
= sd_device_get_devpath(event
->dev
, &devpath
);
916 devpath_len
= strlen(devpath
);
918 r
= sd_device_get_property_value(event
->dev
, "DEVPATH_OLD", &devpath_old
);
919 if (r
< 0 && r
!= -ENOENT
)
922 r
= sd_device_get_devnum(event
->dev
, &devnum
);
923 if (r
< 0 && r
!= -ENOENT
)
926 r
= sd_device_get_ifindex(event
->dev
, &ifindex
);
927 if (r
< 0 && r
!= -ENOENT
)
930 /* check if queue contains events we depend on */
931 LIST_FOREACH(event
, e
, loop_event
) {
932 size_t loop_devpath_len
, common
;
933 const char *loop_devpath
;
937 /* found ourself, no later event can block us */
938 if (loop_event
->seqnum
>= event
->seqnum
)
941 /* check major/minor */
942 if (major(devnum
) != 0) {
946 if (sd_device_get_subsystem(loop_event
->dev
, &s
) < 0)
949 if (sd_device_get_devnum(loop_event
->dev
, &d
) >= 0 &&
950 devnum
== d
&& is_block
== streq(s
, "block"))
954 /* check network device ifindex */
958 if (sd_device_get_ifindex(loop_event
->dev
, &i
) >= 0 &&
963 if (sd_device_get_devpath(loop_event
->dev
, &loop_devpath
) < 0)
966 /* check our old name */
967 if (devpath_old
&& streq(devpath_old
, loop_devpath
))
970 loop_devpath_len
= strlen(loop_devpath
);
972 /* compare devpath */
973 common
= MIN(devpath_len
, loop_devpath_len
);
975 /* one devpath is contained in the other? */
976 if (!strneq(devpath
, loop_devpath
, common
))
979 /* identical device event found */
980 if (devpath_len
== loop_devpath_len
)
983 /* parent device event found */
984 if (devpath
[common
] == '/')
987 /* child device event found */
988 if (loop_devpath
[common
] == '/')
994 log_device_debug(event
->dev
, "SEQNUM=%" PRIu64
" blocked by SEQNUM=%" PRIu64
,
995 event
->seqnum
, loop_event
->seqnum
);
997 event
->blocker_seqnum
= loop_event
->seqnum
;
1001 event
->blocker_seqnum
= event
->seqnum
;
1005 static int event_queue_start(Manager
*manager
) {
1011 if (LIST_IS_EMPTY(manager
->events
) ||
1012 manager
->exit
|| manager
->stop_exec_queue
)
1015 assert_se(sd_event_now(manager
->event
, CLOCK_MONOTONIC
, &usec
) >= 0);
1016 /* check for changed config, every 3 seconds at most */
1017 if (manager
->last_usec
== 0 ||
1018 usec
> usec_add(manager
->last_usec
, 3 * USEC_PER_SEC
)) {
1019 if (udev_rules_check_timestamp(manager
->rules
) ||
1020 udev_builtin_validate())
1021 manager_reload(manager
);
1023 manager
->last_usec
= usec
;
1026 r
= event_source_disable(manager
->kill_workers_event
);
1028 log_warning_errno(r
, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
1030 udev_builtin_init();
1032 if (!manager
->rules
) {
1033 r
= udev_rules_load(&manager
->rules
, arg_resolve_name_timing
);
1035 return log_warning_errno(r
, "Failed to read udev rules: %m");
1038 /* fork with up-to-date SELinux label database, so the child inherits the up-to-date db
1039 * and, until the next SELinux policy changes, we safe further reloads in future children */
1040 mac_selinux_maybe_reload();
1042 LIST_FOREACH(event
, event
, manager
->events
) {
1043 if (event
->state
!= EVENT_QUEUED
)
1046 /* do not start event if parent or child event is still running or queued */
1047 r
= event_is_blocked(event
);
1051 log_device_warning_errno(event
->dev
, r
,
1052 "Failed to check dependencies for event (SEQNUM=%"PRIu64
", ACTION=%s), "
1053 "assuming there is no blocking event, ignoring: %m",
1055 strna(device_action_to_string(event
->action
)));
1057 r
= event_run(event
);
1058 if (r
<= 0) /* 0 means there are no idle workers. Let's escape from the loop. */
1065 static int event_requeue(Event
*event
) {
1070 assert(event
->manager
);
1071 assert(event
->manager
->event
);
1073 event
->timeout_warning_event
= sd_event_source_disable_unref(event
->timeout_warning_event
);
1074 event
->timeout_event
= sd_event_source_disable_unref(event
->timeout_event
);
1076 /* add a short delay to suppress busy loop */
1077 r
= sd_event_now(event
->manager
->event
, CLOCK_BOOTTIME
, &now_usec
);
1079 return log_device_warning_errno(event
->dev
, r
,
1080 "Failed to get current time, "
1081 "skipping event (SEQNUM=%"PRIu64
", ACTION=%s): %m",
1082 event
->seqnum
, strna(device_action_to_string(event
->action
)));
1084 if (event
->retry_again_timeout_usec
> 0 && event
->retry_again_timeout_usec
<= now_usec
)
1085 return log_device_warning_errno(event
->dev
, SYNTHETIC_ERRNO(ETIMEDOUT
),
1086 "The underlying block device is locked by a process more than %s, "
1087 "skipping event (SEQNUM=%"PRIu64
", ACTION=%s).",
1088 FORMAT_TIMESPAN(EVENT_RETRY_TIMEOUT_USEC
, USEC_PER_MINUTE
),
1089 event
->seqnum
, strna(device_action_to_string(event
->action
)));
1091 event
->retry_again_next_usec
= usec_add(now_usec
, EVENT_RETRY_INTERVAL_USEC
);
1092 if (event
->retry_again_timeout_usec
== 0)
1093 event
->retry_again_timeout_usec
= usec_add(now_usec
, EVENT_RETRY_TIMEOUT_USEC
);
1095 if (event
->worker
&& event
->worker
->event
== event
)
1096 event
->worker
->event
= NULL
;
1097 event
->worker
= NULL
;
1099 event
->state
= EVENT_QUEUED
;
1103 static int event_queue_assume_block_device_unlocked(Manager
*manager
, sd_device
*dev
) {
1104 const char *devname
;
1107 /* When a new event for a block device is queued or we get an inotify event, assume that the
1108 * device is not locked anymore. The assumption may not be true, but that should not cause any
1109 * issues, as in that case events will be requeued soon. */
1111 r
= device_get_whole_disk(dev
, NULL
, &devname
);
1115 LIST_FOREACH(event
, event
, manager
->events
) {
1116 const char *event_devname
;
1118 if (event
->state
!= EVENT_QUEUED
)
1121 if (event
->retry_again_next_usec
== 0)
1124 if (device_get_whole_disk(event
->dev
, NULL
, &event_devname
) <= 0)
1127 if (!streq(devname
, event_devname
))
1130 event
->retry_again_next_usec
= 0;
1136 static int event_queue_insert(Manager
*manager
, sd_device
*dev
) {
1137 sd_device_action_t action
;
1145 /* only one process can add events to the queue */
1146 assert(manager
->pid
== getpid_cached());
1148 /* We only accepts devices received by device monitor. */
1149 r
= sd_device_get_seqnum(dev
, &seqnum
);
1153 r
= sd_device_get_action(dev
, &action
);
1157 event
= new(Event
, 1);
1163 .dev
= sd_device_ref(dev
),
1166 .state
= EVENT_QUEUED
,
1169 if (LIST_IS_EMPTY(manager
->events
)) {
1170 r
= touch("/run/udev/queue");
1172 log_warning_errno(r
, "Failed to touch /run/udev/queue, ignoring: %m");
1175 LIST_APPEND(event
, manager
->events
, event
);
1177 log_device_uevent(dev
, "Device is queued");
1182 static int on_uevent(sd_device_monitor
*monitor
, sd_device
*dev
, void *userdata
) {
1183 Manager
*manager
= userdata
;
1188 DEVICE_TRACE_POINT(kernel_uevent_received
, dev
);
1190 device_ensure_usec_initialized(dev
, NULL
);
1192 r
= event_queue_insert(manager
, dev
);
1194 log_device_error_errno(dev
, r
, "Failed to insert device into event queue: %m");
1198 (void) event_queue_assume_block_device_unlocked(manager
, dev
);
1200 /* we have fresh events, try to schedule them */
1201 event_queue_start(manager
);
1206 static int on_worker(sd_event_source
*s
, int fd
, uint32_t revents
, void *userdata
) {
1207 Manager
*manager
= userdata
;
1213 struct iovec iovec
= IOVEC_MAKE(&result
, sizeof(result
));
1214 CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred
))) control
;
1215 struct msghdr msghdr
= {
1218 .msg_control
= &control
,
1219 .msg_controllen
= sizeof(control
),
1222 struct ucred
*ucred
;
1225 size
= recvmsg_safe(fd
, &msghdr
, MSG_DONTWAIT
);
1228 if (size
== -EAGAIN
)
1229 /* nothing more to read */
1232 return log_error_errno(size
, "Failed to receive message: %m");
1234 cmsg_close_all(&msghdr
);
1236 if (size
!= sizeof(result
)) {
1237 log_warning("Ignoring worker message with invalid size %zi bytes", size
);
1241 ucred
= CMSG_FIND_DATA(&msghdr
, SOL_SOCKET
, SCM_CREDENTIALS
, struct ucred
);
1242 if (!ucred
|| ucred
->pid
<= 0) {
1243 log_warning("Ignoring worker message without valid PID");
1247 /* lookup worker who sent the signal */
1248 worker
= hashmap_get(manager
->workers
, PID_TO_PTR(ucred
->pid
));
1250 log_debug("Worker ["PID_FMT
"] returned, but is no longer tracked", ucred
->pid
);
1254 if (worker
->state
== WORKER_KILLING
) {
1255 worker
->state
= WORKER_KILLED
;
1256 (void) kill(worker
->pid
, SIGTERM
);
1257 } else if (worker
->state
!= WORKER_KILLED
)
1258 worker
->state
= WORKER_IDLE
;
1260 /* worker returned */
1261 if (result
== EVENT_RESULT_TRY_AGAIN
&&
1262 event_requeue(worker
->event
) < 0)
1263 device_broadcast(manager
->monitor
, worker
->event
->dev
, -ETIMEDOUT
);
1265 /* When event_requeue() succeeds, worker->event is NULL, and event_free() handles NULL gracefully. */
1266 event_free(worker
->event
);
1269 /* we have free workers, try to schedule events */
1270 event_queue_start(manager
);
1275 /* receive the udevd message from userspace */
1276 static int on_ctrl_msg(UdevCtrl
*uctrl
, UdevCtrlMessageType type
, const UdevCtrlMessageValue
*value
, void *userdata
) {
1277 Manager
*manager
= userdata
;
1284 case UDEV_CTRL_SET_LOG_LEVEL
:
1285 log_debug("Received udev control message (SET_LOG_LEVEL), setting log_level=%i", value
->intval
);
1286 log_set_max_level(value
->intval
);
1287 manager
->log_level
= value
->intval
;
1288 manager_kill_workers(manager
, false);
1290 case UDEV_CTRL_STOP_EXEC_QUEUE
:
1291 log_debug("Received udev control message (STOP_EXEC_QUEUE)");
1292 manager
->stop_exec_queue
= true;
1294 case UDEV_CTRL_START_EXEC_QUEUE
:
1295 log_debug("Received udev control message (START_EXEC_QUEUE)");
1296 manager
->stop_exec_queue
= false;
1297 event_queue_start(manager
);
1299 case UDEV_CTRL_RELOAD
:
1300 log_debug("Received udev control message (RELOAD)");
1301 manager_reload(manager
);
1303 case UDEV_CTRL_SET_ENV
: {
1304 _unused_ _cleanup_free_
char *old_val
= NULL
;
1305 _cleanup_free_
char *key
= NULL
, *val
= NULL
, *old_key
= NULL
;
1308 eq
= strchr(value
->buf
, '=');
1310 log_error("Invalid key format '%s'", value
->buf
);
1314 key
= strndup(value
->buf
, eq
- value
->buf
);
1320 old_val
= hashmap_remove2(manager
->properties
, key
, (void **) &old_key
);
1322 r
= hashmap_ensure_allocated(&manager
->properties
, &string_hash_ops
);
1330 log_debug("Received udev control message (ENV), unsetting '%s'", key
);
1332 r
= hashmap_put(manager
->properties
, key
, NULL
);
1344 log_debug("Received udev control message (ENV), setting '%s=%s'", key
, val
);
1346 r
= hashmap_put(manager
->properties
, key
, val
);
1354 manager_kill_workers(manager
, false);
1357 case UDEV_CTRL_SET_CHILDREN_MAX
:
1358 if (value
->intval
<= 0) {
1359 log_debug("Received invalid udev control message (SET_MAX_CHILDREN, %i), ignoring.", value
->intval
);
1363 log_debug("Received udev control message (SET_MAX_CHILDREN), setting children_max=%i", value
->intval
);
1364 arg_children_max
= value
->intval
;
1368 case UDEV_CTRL_PING
:
1369 log_debug("Received udev control message (PING)");
1371 case UDEV_CTRL_EXIT
:
1372 log_debug("Received udev control message (EXIT)");
1373 manager_exit(manager
);
1376 log_debug("Received unknown udev control message, ignoring");
1382 static int synthesize_change_one(sd_device
*dev
, sd_device
*target
) {
1385 if (DEBUG_LOGGING
) {
1386 const char *syspath
= NULL
;
1387 (void) sd_device_get_syspath(target
, &syspath
);
1388 log_device_debug(dev
, "device is closed, synthesising 'change' on %s", strna(syspath
));
1391 r
= sd_device_trigger(target
, SD_DEVICE_CHANGE
);
1393 return log_device_debug_errno(target
, r
, "Failed to trigger 'change' uevent: %m");
1395 DEVICE_TRACE_POINT(synthetic_change_event
, dev
);
1400 static int synthesize_change(sd_device
*dev
) {
1401 const char *subsystem
, *sysname
, *devtype
;
1404 r
= sd_device_get_subsystem(dev
, &subsystem
);
1408 r
= sd_device_get_devtype(dev
, &devtype
);
1412 r
= sd_device_get_sysname(dev
, &sysname
);
1416 if (streq_ptr(subsystem
, "block") &&
1417 streq_ptr(devtype
, "disk") &&
1418 !startswith(sysname
, "dm-")) {
1419 _cleanup_(sd_device_enumerator_unrefp
) sd_device_enumerator
*e
= NULL
;
1420 bool part_table_read
= false, has_partitions
= false;
1424 /* Try to re-read the partition table. This only succeeds if none of the devices is
1425 * busy. The kernel returns 0 if no partition table is found, and we will not get an
1426 * event for the disk. */
1427 fd
= sd_device_open(dev
, O_RDONLY
|O_CLOEXEC
|O_NONBLOCK
);
1429 r
= flock(fd
, LOCK_EX
|LOCK_NB
);
1431 r
= ioctl(fd
, BLKRRPART
, 0);
1435 part_table_read
= true;
1438 /* search for partitions */
1439 r
= sd_device_enumerator_new(&e
);
1443 r
= sd_device_enumerator_allow_uninitialized(e
);
1447 r
= sd_device_enumerator_add_match_parent(e
, dev
);
1451 r
= sd_device_enumerator_add_match_subsystem(e
, "block", true);
1455 FOREACH_DEVICE(e
, d
) {
1458 if (sd_device_get_devtype(d
, &t
) < 0 || !streq(t
, "partition"))
1461 has_partitions
= true;
1465 /* We have partitions and re-read the table, the kernel already sent out a "change"
1466 * event for the disk, and "remove/add" for all partitions. */
1467 if (part_table_read
&& has_partitions
)
1470 /* We have partitions but re-reading the partition table did not work, synthesize
1471 * "change" for the disk and all partitions. */
1472 (void) synthesize_change_one(dev
, dev
);
1474 FOREACH_DEVICE(e
, d
) {
1477 if (sd_device_get_devtype(d
, &t
) < 0 || !streq(t
, "partition"))
1480 (void) synthesize_change_one(dev
, d
);
1484 (void) synthesize_change_one(dev
, dev
);
1489 static int on_inotify(sd_event_source
*s
, int fd
, uint32_t revents
, void *userdata
) {
1490 Manager
*manager
= userdata
;
1491 union inotify_event_buffer buffer
;
1497 r
= event_source_disable(manager
->kill_workers_event
);
1499 log_warning_errno(r
, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
1501 l
= read(fd
, &buffer
, sizeof(buffer
));
1503 if (ERRNO_IS_TRANSIENT(errno
))
1506 return log_error_errno(errno
, "Failed to read inotify fd: %m");
1509 FOREACH_INOTIFY_EVENT_WARN(e
, buffer
, l
) {
1510 _cleanup_(sd_device_unrefp
) sd_device
*dev
= NULL
;
1511 const char *devnode
;
1513 r
= device_new_from_watch_handle(&dev
, e
->wd
);
1515 log_debug_errno(r
, "Failed to create sd_device object from watch handle, ignoring: %m");
1519 if (sd_device_get_devname(dev
, &devnode
) < 0)
1522 log_device_debug(dev
, "Inotify event: %x for %s", e
->mask
, devnode
);
1523 if (e
->mask
& IN_CLOSE_WRITE
) {
1524 (void) event_queue_assume_block_device_unlocked(manager
, dev
);
1525 (void) synthesize_change(dev
);
1528 /* Do not handle IN_IGNORED here. It should be handled by worker in 'remove' uevent;
1529 * udev_event_execute_rules() -> event_execute_rules_on_remove() -> udev_watch_end(). */
1535 static int on_sigterm(sd_event_source
*s
, const struct signalfd_siginfo
*si
, void *userdata
) {
1536 Manager
*manager
= userdata
;
1540 manager_exit(manager
);
1545 static int on_sighup(sd_event_source
*s
, const struct signalfd_siginfo
*si
, void *userdata
) {
1546 Manager
*manager
= userdata
;
1550 manager_reload(manager
);
1555 static int on_sigchld(sd_event_source
*s
, const siginfo_t
*si
, void *userdata
) {
1556 Worker
*worker
= ASSERT_PTR(userdata
);
1557 Manager
*manager
= ASSERT_PTR(worker
->manager
);
1558 sd_device
*dev
= worker
->event
? ASSERT_PTR(worker
->event
->dev
) : NULL
;
1564 switch (si
->si_code
) {
1566 if (si
->si_status
== 0)
1567 log_device_debug(dev
, "Worker ["PID_FMT
"] exited.", si
->si_pid
);
1569 log_device_warning(dev
, "Worker ["PID_FMT
"] exited with return code %i.",
1570 si
->si_pid
, si
->si_status
);
1571 result
= EVENT_RESULT_EXIT_STATUS_BASE
+ si
->si_status
;
1576 log_device_warning(dev
, "Worker ["PID_FMT
"] terminated by signal %i (%s).",
1577 si
->si_pid
, si
->si_status
, signal_to_string(si
->si_status
));
1578 result
= EVENT_RESULT_SIGNAL_BASE
+ si
->si_status
;
1582 assert_not_reached();
1585 if (result
!= EVENT_RESULT_SUCCESS
&& dev
) {
1586 /* delete state from disk */
1587 device_delete_db(dev
);
1588 device_tag_index(dev
, NULL
, false);
1590 /* Forward kernel event to libudev listeners */
1591 device_broadcast(manager
->monitor
, dev
, result
);
1594 worker_free(worker
);
1596 /* we can start new workers, try to schedule events */
1597 event_queue_start(manager
);
1599 /* Disable unnecessary cleanup event */
1600 if (hashmap_isempty(manager
->workers
)) {
1601 r
= event_source_disable(manager
->kill_workers_event
);
1603 log_warning_errno(r
, "Failed to disable event source for cleaning up idle workers, ignoring: %m");
1609 static int on_post(sd_event_source
*s
, void *userdata
) {
1610 Manager
*manager
= userdata
;
1614 if (!LIST_IS_EMPTY(manager
->events
)) {
1615 /* Try to process pending events if idle workers exist. Why is this necessary?
1616 * When a worker finished an event and became idle, even if there was a pending event,
1617 * the corresponding device might have been locked and the processing of the event
1618 * delayed for a while, preventing the worker from processing the event immediately.
1619 * Now, the device may be unlocked. Let's try again! */
1620 event_queue_start(manager
);
1624 /* There are no queued events. Let's remove /run/udev/queue and clean up the idle processes. */
1626 if (unlink("/run/udev/queue") < 0) {
1627 if (errno
!= ENOENT
)
1628 log_warning_errno(errno
, "Failed to unlink /run/udev/queue, ignoring: %m");
1630 log_debug("No events are queued, removing /run/udev/queue.");
1632 if (!hashmap_isempty(manager
->workers
)) {
1633 /* There are idle workers */
1634 (void) event_reset_time(manager
->event
, &manager
->kill_workers_event
, CLOCK_MONOTONIC
,
1635 now(CLOCK_MONOTONIC
) + 3 * USEC_PER_SEC
, USEC_PER_SEC
,
1636 on_kill_workers_event
, manager
, 0, "kill-workers-event", false);
1640 /* There are no idle workers. */
1643 return sd_event_exit(manager
->event
, 0);
1645 if (manager
->cgroup
)
1646 /* cleanup possible left-over processes in our cgroup */
1647 (void) cg_kill(SYSTEMD_CGROUP_CONTROLLER
, manager
->cgroup
, SIGKILL
, CGROUP_IGNORE_SELF
, NULL
, NULL
, NULL
);
1652 static int listen_fds(int *ret_ctrl
, int *ret_netlink
) {
1653 int ctrl_fd
= -1, netlink_fd
= -1;
1657 assert(ret_netlink
);
1659 n
= sd_listen_fds(true);
1663 for (fd
= SD_LISTEN_FDS_START
; fd
< n
+ SD_LISTEN_FDS_START
; fd
++) {
1664 if (sd_is_socket(fd
, AF_UNIX
, SOCK_SEQPACKET
, -1) > 0) {
1671 if (sd_is_socket(fd
, AF_NETLINK
, SOCK_RAW
, -1) > 0) {
1672 if (netlink_fd
>= 0)
1681 *ret_ctrl
= ctrl_fd
;
1682 *ret_netlink
= netlink_fd
;
1688 * read the kernel command line, in case we need to get into debug mode
1689 * udev.log_level=<level> syslog priority
1690 * udev.children_max=<number of workers> events are fully serialized if set to 1
1691 * udev.exec_delay=<number of seconds> delay execution of every executed program
1692 * udev.event_timeout=<number of seconds> seconds to wait before terminating an event
1693 * udev.blockdev_read_only<=bool> mark all block devices read-only when they appear
1695 static int parse_proc_cmdline_item(const char *key
, const char *value
, void *data
) {
1700 if (proc_cmdline_key_streq(key
, "udev.log_level") ||
1701 proc_cmdline_key_streq(key
, "udev.log_priority")) { /* kept for backward compatibility */
1703 if (proc_cmdline_value_missing(key
, value
))
1706 r
= log_level_from_string(value
);
1708 log_set_max_level(r
);
1710 } else if (proc_cmdline_key_streq(key
, "udev.event_timeout")) {
1712 if (proc_cmdline_value_missing(key
, value
))
1715 r
= parse_sec(value
, &arg_event_timeout_usec
);
1717 } else if (proc_cmdline_key_streq(key
, "udev.children_max")) {
1719 if (proc_cmdline_value_missing(key
, value
))
1722 r
= safe_atou(value
, &arg_children_max
);
1724 } else if (proc_cmdline_key_streq(key
, "udev.exec_delay")) {
1726 if (proc_cmdline_value_missing(key
, value
))
1729 r
= parse_sec(value
, &arg_exec_delay_usec
);
1731 } else if (proc_cmdline_key_streq(key
, "udev.timeout_signal")) {
1733 if (proc_cmdline_value_missing(key
, value
))
1736 r
= signal_from_string(value
);
1738 arg_timeout_signal
= r
;
1740 } else if (proc_cmdline_key_streq(key
, "udev.blockdev_read_only")) {
1743 arg_blockdev_read_only
= true;
1745 r
= parse_boolean(value
);
1747 log_warning_errno(r
, "Failed to parse udev.blockdev-read-only argument, ignoring: %s", value
);
1749 arg_blockdev_read_only
= r
;
1752 if (arg_blockdev_read_only
)
1753 log_notice("All physical block devices will be marked read-only.");
1758 if (startswith(key
, "udev."))
1759 log_warning("Unknown udev kernel command line option \"%s\", ignoring.", key
);
1765 log_warning_errno(r
, "Failed to parse \"%s=%s\", ignoring: %m", key
, value
);
1770 static int help(void) {
1771 _cleanup_free_
char *link
= NULL
;
1774 r
= terminal_urlify_man("systemd-udevd.service", "8", &link
);
1778 printf("%s [OPTIONS...]\n\n"
1779 "Rule-based manager for device events and files.\n\n"
1780 " -h --help Print this message\n"
1781 " -V --version Print version of the program\n"
1782 " -d --daemon Detach and run in the background\n"
1783 " -D --debug Enable debug output\n"
1784 " -c --children-max=INT Set maximum number of workers\n"
1785 " -e --exec-delay=SECONDS Seconds to wait before executing RUN=\n"
1786 " -t --event-timeout=SECONDS Seconds to wait before terminating an event\n"
1787 " -N --resolve-names=early|late|never\n"
1788 " When to resolve users and groups\n"
1789 "\nSee the %s for details.\n",
1790 program_invocation_short_name
,
1796 static int parse_argv(int argc
, char *argv
[]) {
1801 static const struct option options
[] = {
1802 { "daemon", no_argument
, NULL
, 'd' },
1803 { "debug", no_argument
, NULL
, 'D' },
1804 { "children-max", required_argument
, NULL
, 'c' },
1805 { "exec-delay", required_argument
, NULL
, 'e' },
1806 { "event-timeout", required_argument
, NULL
, 't' },
1807 { "resolve-names", required_argument
, NULL
, 'N' },
1808 { "help", no_argument
, NULL
, 'h' },
1809 { "version", no_argument
, NULL
, 'V' },
1810 { "timeout-signal", required_argument
, NULL
, ARG_TIMEOUT_SIGNAL
},
1819 while ((c
= getopt_long(argc
, argv
, "c:de:Dt:N:hV", options
, NULL
)) >= 0) {
1823 arg_daemonize
= true;
1826 r
= safe_atou(optarg
, &arg_children_max
);
1828 log_warning_errno(r
, "Failed to parse --children-max= value '%s', ignoring: %m", optarg
);
1831 r
= parse_sec(optarg
, &arg_exec_delay_usec
);
1833 log_warning_errno(r
, "Failed to parse --exec-delay= value '%s', ignoring: %m", optarg
);
1835 case ARG_TIMEOUT_SIGNAL
:
1836 r
= signal_from_string(optarg
);
1838 log_warning_errno(r
, "Failed to parse --timeout-signal= value '%s', ignoring: %m", optarg
);
1840 arg_timeout_signal
= r
;
1844 r
= parse_sec(optarg
, &arg_event_timeout_usec
);
1846 log_warning_errno(r
, "Failed to parse --event-timeout= value '%s', ignoring: %m", optarg
);
1852 ResolveNameTiming t
;
1854 t
= resolve_name_timing_from_string(optarg
);
1856 log_warning("Invalid --resolve-names= value '%s', ignoring.", optarg
);
1858 arg_resolve_name_timing
= t
;
1864 printf("%s\n", GIT_VERSION
);
1869 assert_not_reached();
1877 static int create_subcgroup(char **ret
) {
1878 _cleanup_free_
char *cgroup
= NULL
, *subcgroup
= NULL
;
1882 return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP
), "Not invoked by PID1.");
1886 return log_debug_errno(r
, "Failed to check if systemd is running: %m");
1888 return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP
), "systemd is not running.");
1890 /* Get our own cgroup, we regularly kill everything udev has left behind.
1891 * We only do this on systemd systems, and only if we are directly spawned
1892 * by PID1. Otherwise we are not guaranteed to have a dedicated cgroup. */
1894 r
= cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER
, 0, &cgroup
);
1896 if (IN_SET(r
, -ENOENT
, -ENOMEDIUM
))
1897 return log_debug_errno(r
, "Dedicated cgroup not found: %m");
1898 return log_debug_errno(r
, "Failed to get cgroup: %m");
1901 r
= cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER
, cgroup
, "trusted.delegate");
1902 if (IN_SET(r
, 0, -ENODATA
))
1903 return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP
), "The cgroup %s is not delegated to us.", cgroup
);
1905 return log_debug_errno(r
, "Failed to read trusted.delegate attribute: %m");
1907 /* We are invoked with our own delegated cgroup tree, let's move us one level down, so that we
1908 * don't collide with the "no processes in inner nodes" rule of cgroups, when the service
1909 * manager invokes the ExecReload= job in the .control/ subcgroup. */
1911 subcgroup
= path_join(cgroup
, "/udev");
1913 return log_oom_debug();
1915 r
= cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER
, subcgroup
, 0);
1917 return log_debug_errno(r
, "Failed to create %s subcgroup: %m", subcgroup
);
1919 log_debug("Created %s subcgroup.", subcgroup
);
1921 *ret
= TAKE_PTR(subcgroup
);
1925 static int manager_new(Manager
**ret
, int fd_ctrl
, int fd_uevent
) {
1926 _cleanup_(manager_freep
) Manager
*manager
= NULL
;
1927 _cleanup_free_
char *cgroup
= NULL
;
1932 (void) create_subcgroup(&cgroup
);
1934 manager
= new(Manager
, 1);
1938 *manager
= (Manager
) {
1940 .worker_watch
= { -1, -1 },
1941 .cgroup
= TAKE_PTR(cgroup
),
1944 r
= udev_ctrl_new_from_fd(&manager
->ctrl
, fd_ctrl
);
1946 return log_error_errno(r
, "Failed to initialize udev control socket: %m");
1948 r
= udev_ctrl_enable_receiving(manager
->ctrl
);
1950 return log_error_errno(r
, "Failed to bind udev control socket: %m");
1952 r
= device_monitor_new_full(&manager
->monitor
, MONITOR_GROUP_KERNEL
, fd_uevent
);
1954 return log_error_errno(r
, "Failed to initialize device monitor: %m");
1956 /* Bump receiver buffer, but only if we are not called via socket activation, as in that
1957 * case systemd sets the receive buffer size for us, and the value in the .socket unit
1958 * should take full effect. */
1959 if (fd_uevent
< 0) {
1960 r
= sd_device_monitor_set_receive_buffer_size(manager
->monitor
, 128 * 1024 * 1024);
1962 log_warning_errno(r
, "Failed to set receive buffer size for device monitor, ignoring: %m");
1965 r
= device_monitor_enable_receiving(manager
->monitor
);
1967 return log_error_errno(r
, "Failed to bind netlink socket: %m");
1969 manager
->log_level
= log_get_max_level();
1971 *ret
= TAKE_PTR(manager
);
1976 static int main_loop(Manager
*manager
) {
1979 manager
->pid
= getpid_cached();
1981 /* unnamed socket from workers to the main daemon */
1982 r
= socketpair(AF_UNIX
, SOCK_DGRAM
|SOCK_CLOEXEC
, 0, manager
->worker_watch
);
1984 return log_error_errno(errno
, "Failed to create socketpair for communicating with workers: %m");
1986 fd_worker
= manager
->worker_watch
[READ_END
];
1988 r
= setsockopt_int(fd_worker
, SOL_SOCKET
, SO_PASSCRED
, true);
1990 return log_error_errno(r
, "Failed to enable SO_PASSCRED: %m");
1992 manager
->inotify_fd
= inotify_init1(IN_CLOEXEC
);
1993 if (manager
->inotify_fd
< 0)
1994 return log_error_errno(errno
, "Failed to create inotify descriptor: %m");
1996 udev_watch_restore(manager
->inotify_fd
);
1998 /* block and listen to all signals on signalfd */
1999 assert_se(sigprocmask_many(SIG_BLOCK
, NULL
, SIGTERM
, SIGINT
, SIGHUP
, SIGCHLD
, -1) >= 0);
2001 r
= sd_event_default(&manager
->event
);
2003 return log_error_errno(r
, "Failed to allocate event loop: %m");
2005 r
= sd_event_add_signal(manager
->event
, NULL
, SIGINT
, on_sigterm
, manager
);
2007 return log_error_errno(r
, "Failed to create SIGINT event source: %m");
2009 r
= sd_event_add_signal(manager
->event
, NULL
, SIGTERM
, on_sigterm
, manager
);
2011 return log_error_errno(r
, "Failed to create SIGTERM event source: %m");
2013 r
= sd_event_add_signal(manager
->event
, NULL
, SIGHUP
, on_sighup
, manager
);
2015 return log_error_errno(r
, "Failed to create SIGHUP event source: %m");
2017 r
= sd_event_set_watchdog(manager
->event
, true);
2019 return log_error_errno(r
, "Failed to create watchdog event source: %m");
2021 r
= udev_ctrl_attach_event(manager
->ctrl
, manager
->event
);
2023 return log_error_errno(r
, "Failed to attach event to udev control: %m");
2025 r
= udev_ctrl_start(manager
->ctrl
, on_ctrl_msg
, manager
);
2027 return log_error_errno(r
, "Failed to start device monitor: %m");
2029 /* This needs to be after the inotify and uevent handling, to make sure
2030 * that the ping is send back after fully processing the pending uevents
2031 * (including the synthetic ones we may create due to inotify events).
2033 r
= sd_event_source_set_priority(udev_ctrl_get_event_source(manager
->ctrl
), SD_EVENT_PRIORITY_IDLE
);
2035 return log_error_errno(r
, "Failed to set IDLE event priority for udev control event source: %m");
2037 r
= sd_event_add_io(manager
->event
, &manager
->inotify_event
, manager
->inotify_fd
, EPOLLIN
, on_inotify
, manager
);
2039 return log_error_errno(r
, "Failed to create inotify event source: %m");
2041 r
= sd_device_monitor_attach_event(manager
->monitor
, manager
->event
);
2043 return log_error_errno(r
, "Failed to attach event to device monitor: %m");
2045 r
= sd_device_monitor_start(manager
->monitor
, on_uevent
, manager
);
2047 return log_error_errno(r
, "Failed to start device monitor: %m");
2049 (void) sd_event_source_set_description(sd_device_monitor_get_event_source(manager
->monitor
), "device-monitor");
2051 r
= sd_event_add_io(manager
->event
, NULL
, fd_worker
, EPOLLIN
, on_worker
, manager
);
2053 return log_error_errno(r
, "Failed to create worker event source: %m");
2055 r
= sd_event_add_post(manager
->event
, NULL
, on_post
, manager
);
2057 return log_error_errno(r
, "Failed to create post event source: %m");
2059 udev_builtin_init();
2061 r
= udev_rules_load(&manager
->rules
, arg_resolve_name_timing
);
2062 if (!manager
->rules
)
2063 return log_error_errno(r
, "Failed to read udev rules: %m");
2065 r
= udev_rules_apply_static_dev_perms(manager
->rules
);
2067 log_error_errno(r
, "Failed to apply permissions on static device nodes: %m");
2071 r
= sd_event_loop(manager
->event
);
2073 log_error_errno(r
, "Event loop failed: %m");
2077 "STATUS=Shutting down...");
2081 int run_udevd(int argc
, char *argv
[]) {
2082 _cleanup_(manager_freep
) Manager
*manager
= NULL
;
2083 int fd_ctrl
= -1, fd_uevent
= -1;
2086 log_set_target(LOG_TARGET_AUTO
);
2088 udev_parse_config_full(&arg_children_max
, &arg_exec_delay_usec
, &arg_event_timeout_usec
, &arg_resolve_name_timing
, &arg_timeout_signal
);
2089 log_parse_environment();
2090 log_open(); /* Done again to update after reading configuration. */
2092 r
= parse_argv(argc
, argv
);
2096 r
= proc_cmdline_parse(parse_proc_cmdline_item
, NULL
, PROC_CMDLINE_STRIP_RD_PREFIX
);
2098 log_warning_errno(r
, "Failed to parse kernel command line, ignoring: %m");
2101 log_set_target(LOG_TARGET_CONSOLE
);
2102 log_set_max_level(LOG_DEBUG
);
2109 if (arg_children_max
== 0) {
2110 unsigned long cpu_limit
, mem_limit
, cpu_count
= 1;
2112 r
= cpus_in_affinity_mask();
2114 log_warning_errno(r
, "Failed to determine number of local CPUs, ignoring: %m");
2118 cpu_limit
= cpu_count
* 2 + 16;
2119 mem_limit
= MAX(physical_memory() / (128UL*1024*1024), 10U);
2121 arg_children_max
= MIN(cpu_limit
, mem_limit
);
2122 arg_children_max
= MIN(WORKER_NUM_MAX
, arg_children_max
);
2124 log_debug("Set children_max to %u", arg_children_max
);
2127 /* set umask before creating any file/directory */
2130 r
= mac_selinux_init();
2134 r
= RET_NERRNO(mkdir("/run/udev", 0755));
2135 if (r
< 0 && r
!= -EEXIST
)
2136 return log_error_errno(r
, "Failed to create /run/udev: %m");
2138 r
= listen_fds(&fd_ctrl
, &fd_uevent
);
2140 return log_error_errno(r
, "Failed to listen on fds: %m");
2142 r
= manager_new(&manager
, fd_ctrl
, fd_uevent
);
2144 return log_error_errno(r
, "Failed to create manager: %m");
2146 if (arg_daemonize
) {
2149 log_info("Starting systemd-udevd version " GIT_VERSION
);
2151 /* connect /dev/null to stdin, stdout, stderr */
2152 if (log_get_max_level() < LOG_DEBUG
) {
2153 r
= make_null_stdio();
2155 log_warning_errno(r
, "Failed to redirect standard streams to /dev/null: %m");
2160 return log_error_errno(errno
, "Failed to fork daemon: %m");
2169 return main_loop(manager
);