2 * Copyright (C) 2004-2012 Kay Sievers <kay@vrfy.org>
3 * Copyright (C) 2004 Chris Friesen <chris_friesen@sympatico.ca>
4 * Copyright (C) 2009 Canonical Ltd.
5 * Copyright (C) 2009 Scott James Remnant <scott@netsplit.com>
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
33 #include <sys/prctl.h>
34 #include <sys/socket.h>
35 #include <sys/signalfd.h>
36 #include <sys/epoll.h>
37 #include <sys/mount.h>
40 #include <sys/ioctl.h>
41 #include <sys/inotify.h>
43 #include "sd-daemon.h"
46 #include "terminal-util.h"
47 #include "signal-util.h"
48 #include "event-util.h"
49 #include "netlink-util.h"
50 #include "cgroup-util.h"
51 #include "process-util.h"
52 #include "dev-setup.h"
54 #include "selinux-util.h"
56 #include "udev-util.h"
57 #include "formats-util.h"
60 static bool arg_debug
= false;
61 static int arg_daemonize
= false;
62 static int arg_resolve_names
= 1;
63 static unsigned arg_children_max
;
64 static int arg_exec_delay
;
65 static usec_t arg_event_timeout_usec
= 180 * USEC_PER_SEC
;
66 static usec_t arg_event_timeout_warn_usec
= 180 * USEC_PER_SEC
/ 3;
68 typedef struct Manager
{
72 struct udev_list_node events
;
74 pid_t pid
; /* the process that originally allocated the manager object */
76 struct udev_rules
*rules
;
77 struct udev_list properties
;
79 struct udev_monitor
*monitor
;
80 struct udev_ctrl
*ctrl
;
81 struct udev_ctrl_connection
*ctrl_conn_blocking
;
85 sd_event_source
*ctrl_event
;
86 sd_event_source
*uevent_event
;
87 sd_event_source
*inotify_event
;
91 bool stop_exec_queue
:1;
102 struct udev_list_node node
;
105 struct udev_device
*dev
;
106 struct udev_device
*dev_kernel
;
107 struct worker
*worker
;
108 enum event_state state
;
109 unsigned long long int delaying_seqnum
;
110 unsigned long long int seqnum
;
113 const char *devpath_old
;
117 sd_event_source
*timeout_warning
;
118 sd_event_source
*timeout
;
121 static inline struct event
*node_to_event(struct udev_list_node
*node
) {
122 return container_of(node
, struct event
, node
);
125 static void event_queue_cleanup(Manager
*manager
, enum event_state type
);
136 struct udev_list_node node
;
139 struct udev_monitor
*monitor
;
140 enum worker_state state
;
144 /* passed from worker to main process */
145 struct worker_message
{
148 static void event_free(struct event
*event
) {
154 udev_list_node_remove(&event
->node
);
155 udev_device_unref(event
->dev
);
156 udev_device_unref(event
->dev_kernel
);
158 sd_event_source_unref(event
->timeout_warning
);
159 sd_event_source_unref(event
->timeout
);
162 event
->worker
->event
= NULL
;
164 assert(event
->manager
);
166 if (udev_list_node_is_empty(&event
->manager
->events
)) {
167 /* only clean up the queue from the process that created it */
168 if (event
->manager
->pid
== getpid()) {
169 r
= unlink("/run/udev/queue");
171 log_warning_errno(errno
, "could not unlink /run/udev/queue: %m");
178 static void worker_free(struct worker
*worker
) {
182 assert(worker
->manager
);
184 hashmap_remove(worker
->manager
->workers
, UINT_TO_PTR(worker
->pid
));
185 udev_monitor_unref(worker
->monitor
);
186 event_free(worker
->event
);
191 static void manager_workers_free(Manager
*manager
) {
192 struct worker
*worker
;
197 HASHMAP_FOREACH(worker
, manager
->workers
, i
)
200 manager
->workers
= hashmap_free(manager
->workers
);
203 static int worker_new(struct worker
**ret
, Manager
*manager
, struct udev_monitor
*worker_monitor
, pid_t pid
) {
204 _cleanup_free_
struct worker
*worker
= NULL
;
209 assert(worker_monitor
);
212 worker
= new0(struct worker
, 1);
216 worker
->refcount
= 1;
217 worker
->manager
= manager
;
218 /* close monitor, but keep address around */
219 udev_monitor_disconnect(worker_monitor
);
220 worker
->monitor
= udev_monitor_ref(worker_monitor
);
223 r
= hashmap_ensure_allocated(&manager
->workers
, NULL
);
227 r
= hashmap_put(manager
->workers
, UINT_TO_PTR(pid
), worker
);
237 static int on_event_timeout(sd_event_source
*s
, uint64_t usec
, void *userdata
) {
238 struct event
*event
= userdata
;
241 assert(event
->worker
);
243 kill_and_sigcont(event
->worker
->pid
, SIGKILL
);
244 event
->worker
->state
= WORKER_KILLED
;
246 log_error("seq %llu '%s' killed", udev_device_get_seqnum(event
->dev
), event
->devpath
);
251 static int on_event_timeout_warning(sd_event_source
*s
, uint64_t usec
, void *userdata
) {
252 struct event
*event
= userdata
;
256 log_warning("seq %llu '%s' is taking a long time", udev_device_get_seqnum(event
->dev
), event
->devpath
);
261 static void worker_attach_event(struct worker
*worker
, struct event
*event
) {
266 assert(worker
->manager
);
268 assert(!event
->worker
);
269 assert(!worker
->event
);
271 worker
->state
= WORKER_RUNNING
;
272 worker
->event
= event
;
273 event
->state
= EVENT_RUNNING
;
274 event
->worker
= worker
;
276 e
= worker
->manager
->event
;
278 assert_se(sd_event_now(e
, clock_boottime_or_monotonic(), &usec
) >= 0);
280 (void) sd_event_add_time(e
, &event
->timeout_warning
, clock_boottime_or_monotonic(),
281 usec
+ arg_event_timeout_warn_usec
, USEC_PER_SEC
, on_event_timeout_warning
, event
);
283 (void) sd_event_add_time(e
, &event
->timeout
, clock_boottime_or_monotonic(),
284 usec
+ arg_event_timeout_usec
, USEC_PER_SEC
, on_event_timeout
, event
);
287 static void manager_free(Manager
*manager
) {
291 udev_builtin_exit(manager
->udev
);
293 sd_event_source_unref(manager
->ctrl_event
);
294 sd_event_source_unref(manager
->uevent_event
);
295 sd_event_source_unref(manager
->inotify_event
);
297 udev_unref(manager
->udev
);
298 sd_event_unref(manager
->event
);
299 manager_workers_free(manager
);
300 event_queue_cleanup(manager
, EVENT_UNDEF
);
302 udev_monitor_unref(manager
->monitor
);
303 udev_ctrl_unref(manager
->ctrl
);
304 udev_ctrl_connection_unref(manager
->ctrl_conn_blocking
);
306 udev_list_cleanup(&manager
->properties
);
307 udev_rules_unref(manager
->rules
);
309 safe_close(manager
->fd_inotify
);
310 safe_close_pair(manager
->worker_watch
);
315 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager
*, manager_free
);
317 static int worker_send_message(int fd
) {
318 struct worker_message message
= {};
320 return loop_write(fd
, &message
, sizeof(message
), false);
323 static void worker_spawn(Manager
*manager
, struct event
*event
) {
324 struct udev
*udev
= event
->udev
;
325 _cleanup_udev_monitor_unref_
struct udev_monitor
*worker_monitor
= NULL
;
329 /* listen for new events */
330 worker_monitor
= udev_monitor_new_from_netlink(udev
, NULL
);
331 if (worker_monitor
== NULL
)
333 /* allow the main daemon netlink address to send devices to the worker */
334 udev_monitor_allow_unicast_sender(worker_monitor
, manager
->monitor
);
335 r
= udev_monitor_enable_receiving(worker_monitor
);
337 log_error_errno(r
, "worker: could not enable receiving of device: %m");
342 struct udev_device
*dev
= NULL
;
343 _cleanup_netlink_unref_ sd_netlink
*rtnl
= NULL
;
345 _cleanup_close_
int fd_signal
= -1, fd_ep
= -1;
346 struct epoll_event ep_signal
= { .events
= EPOLLIN
};
347 struct epoll_event ep_monitor
= { .events
= EPOLLIN
};
350 /* take initial device from queue */
354 unsetenv("NOTIFY_SOCKET");
356 manager_workers_free(manager
);
357 event_queue_cleanup(manager
, EVENT_UNDEF
);
359 manager
->monitor
= udev_monitor_unref(manager
->monitor
);
360 manager
->ctrl_conn_blocking
= udev_ctrl_connection_unref(manager
->ctrl_conn_blocking
);
361 manager
->ctrl
= udev_ctrl_unref(manager
->ctrl
);
362 manager
->ctrl_conn_blocking
= udev_ctrl_connection_unref(manager
->ctrl_conn_blocking
);
363 manager
->worker_watch
[READ_END
] = safe_close(manager
->worker_watch
[READ_END
]);
365 manager
->ctrl_event
= sd_event_source_unref(manager
->ctrl_event
);
366 manager
->uevent_event
= sd_event_source_unref(manager
->uevent_event
);
367 manager
->inotify_event
= sd_event_source_unref(manager
->inotify_event
);
369 manager
->event
= sd_event_unref(manager
->event
);
372 fd_signal
= signalfd(-1, &mask
, SFD_NONBLOCK
|SFD_CLOEXEC
);
374 r
= log_error_errno(errno
, "error creating signalfd %m");
377 ep_signal
.data
.fd
= fd_signal
;
379 fd_monitor
= udev_monitor_get_fd(worker_monitor
);
380 ep_monitor
.data
.fd
= fd_monitor
;
382 fd_ep
= epoll_create1(EPOLL_CLOEXEC
);
384 r
= log_error_errno(errno
, "error creating epoll fd: %m");
388 if (epoll_ctl(fd_ep
, EPOLL_CTL_ADD
, fd_signal
, &ep_signal
) < 0 ||
389 epoll_ctl(fd_ep
, EPOLL_CTL_ADD
, fd_monitor
, &ep_monitor
) < 0) {
390 r
= log_error_errno(errno
, "fail to add fds to epoll: %m");
394 /* request TERM signal if parent exits */
395 prctl(PR_SET_PDEATHSIG
, SIGTERM
);
397 /* reset OOM score, we only protect the main daemon */
398 write_string_file("/proc/self/oom_score_adj", "0", 0);
401 struct udev_event
*udev_event
;
406 log_debug("seq %llu running", udev_device_get_seqnum(dev
));
407 udev_event
= udev_event_new(dev
);
408 if (udev_event
== NULL
) {
413 if (arg_exec_delay
> 0)
414 udev_event
->exec_delay
= arg_exec_delay
;
417 * Take a shared lock on the device node; this establishes
418 * a concept of device "ownership" to serialize device
419 * access. External processes holding an exclusive lock will
420 * cause udev to skip the event handling; in the case udev
421 * acquired the lock, the external process can block until
422 * udev has finished its event handling.
424 if (!streq_ptr(udev_device_get_action(dev
), "remove") &&
425 streq_ptr("block", udev_device_get_subsystem(dev
)) &&
426 !startswith(udev_device_get_sysname(dev
), "dm-") &&
427 !startswith(udev_device_get_sysname(dev
), "md")) {
428 struct udev_device
*d
= dev
;
430 if (streq_ptr("partition", udev_device_get_devtype(d
)))
431 d
= udev_device_get_parent(d
);
434 fd_lock
= open(udev_device_get_devnode(d
), O_RDONLY
|O_CLOEXEC
|O_NOFOLLOW
|O_NONBLOCK
);
435 if (fd_lock
>= 0 && flock(fd_lock
, LOCK_SH
|LOCK_NB
) < 0) {
436 log_debug_errno(errno
, "Unable to flock(%s), skipping event handling: %m", udev_device_get_devnode(d
));
437 fd_lock
= safe_close(fd_lock
);
443 /* needed for renaming netifs */
444 udev_event
->rtnl
= rtnl
;
446 /* apply rules, create node, symlinks */
447 udev_event_execute_rules(udev_event
,
448 arg_event_timeout_usec
, arg_event_timeout_warn_usec
,
449 &manager
->properties
,
452 udev_event_execute_run(udev_event
,
453 arg_event_timeout_usec
, arg_event_timeout_warn_usec
);
455 if (udev_event
->rtnl
)
456 /* in case rtnl was initialized */
457 rtnl
= sd_netlink_ref(udev_event
->rtnl
);
459 /* apply/restore inotify watch */
460 if (udev_event
->inotify_watch
) {
461 udev_watch_begin(udev
, dev
);
462 udev_device_update_db(dev
);
467 /* send processed event back to libudev listeners */
468 udev_monitor_send_device(worker_monitor
, NULL
, dev
);
471 log_debug("seq %llu processed", udev_device_get_seqnum(dev
));
473 /* send udevd the result of the event execution */
474 r
= worker_send_message(manager
->worker_watch
[WRITE_END
]);
476 log_error_errno(r
, "failed to send result of seq %llu to main daemon: %m",
477 udev_device_get_seqnum(dev
));
479 udev_device_unref(dev
);
482 udev_event_unref(udev_event
);
484 /* wait for more device messages from main udevd, or term signal */
485 while (dev
== NULL
) {
486 struct epoll_event ev
[4];
490 fdcount
= epoll_wait(fd_ep
, ev
, ELEMENTSOF(ev
), -1);
494 r
= log_error_errno(errno
, "failed to poll: %m");
498 for (i
= 0; i
< fdcount
; i
++) {
499 if (ev
[i
].data
.fd
== fd_monitor
&& ev
[i
].events
& EPOLLIN
) {
500 dev
= udev_monitor_receive_device(worker_monitor
);
502 } else if (ev
[i
].data
.fd
== fd_signal
&& ev
[i
].events
& EPOLLIN
) {
503 struct signalfd_siginfo fdsi
;
506 size
= read(fd_signal
, &fdsi
, sizeof(struct signalfd_siginfo
));
507 if (size
!= sizeof(struct signalfd_siginfo
))
509 switch (fdsi
.ssi_signo
) {
518 udev_device_unref(dev
);
519 manager_free(manager
);
521 _exit(r
< 0 ? EXIT_FAILURE
: EXIT_SUCCESS
);
524 event
->state
= EVENT_QUEUED
;
525 log_error_errno(errno
, "fork of child failed: %m");
529 struct worker
*worker
;
531 r
= worker_new(&worker
, manager
, worker_monitor
, pid
);
535 worker_attach_event(worker
, event
);
537 log_debug("seq %llu forked new worker ["PID_FMT
"]", udev_device_get_seqnum(event
->dev
), pid
);
543 static void event_run(Manager
*manager
, struct event
*event
) {
544 struct worker
*worker
;
550 HASHMAP_FOREACH(worker
, manager
->workers
, i
) {
553 if (worker
->state
!= WORKER_IDLE
)
556 count
= udev_monitor_send_device(manager
->monitor
, worker
->monitor
, event
->dev
);
558 log_error_errno(errno
, "worker ["PID_FMT
"] did not accept message %zi (%m), kill it",
560 kill(worker
->pid
, SIGKILL
);
561 worker
->state
= WORKER_KILLED
;
564 worker_attach_event(worker
, event
);
568 if (hashmap_size(manager
->workers
) >= arg_children_max
) {
569 if (arg_children_max
> 1)
570 log_debug("maximum number (%i) of children reached", hashmap_size(manager
->workers
));
574 /* start new worker and pass initial device */
575 worker_spawn(manager
, event
);
578 static int event_queue_insert(Manager
*manager
, struct udev_device
*dev
) {
585 /* only one process can add events to the queue */
586 if (manager
->pid
== 0)
587 manager
->pid
= getpid();
589 assert(manager
->pid
== getpid());
591 event
= new0(struct event
, 1);
595 event
->udev
= udev_device_get_udev(dev
);
596 event
->manager
= manager
;
598 event
->dev_kernel
= udev_device_shallow_clone(dev
);
599 udev_device_copy_properties(event
->dev_kernel
, dev
);
600 event
->seqnum
= udev_device_get_seqnum(dev
);
601 event
->devpath
= udev_device_get_devpath(dev
);
602 event
->devpath_len
= strlen(event
->devpath
);
603 event
->devpath_old
= udev_device_get_devpath_old(dev
);
604 event
->devnum
= udev_device_get_devnum(dev
);
605 event
->is_block
= streq("block", udev_device_get_subsystem(dev
));
606 event
->ifindex
= udev_device_get_ifindex(dev
);
608 log_debug("seq %llu queued, '%s' '%s'", udev_device_get_seqnum(dev
),
609 udev_device_get_action(dev
), udev_device_get_subsystem(dev
));
611 event
->state
= EVENT_QUEUED
;
613 if (udev_list_node_is_empty(&manager
->events
)) {
614 r
= touch("/run/udev/queue");
616 log_warning_errno(r
, "could not touch /run/udev/queue: %m");
619 udev_list_node_append(&event
->node
, &manager
->events
);
624 static void manager_kill_workers(Manager
*manager
) {
625 struct worker
*worker
;
630 HASHMAP_FOREACH(worker
, manager
->workers
, i
) {
631 if (worker
->state
== WORKER_KILLED
)
634 worker
->state
= WORKER_KILLED
;
635 kill(worker
->pid
, SIGTERM
);
639 /* lookup event for identical, parent, child device */
640 static bool is_devpath_busy(Manager
*manager
, struct event
*event
) {
641 struct udev_list_node
*loop
;
644 /* check if queue contains events we depend on */
645 udev_list_node_foreach(loop
, &manager
->events
) {
646 struct event
*loop_event
= node_to_event(loop
);
648 /* we already found a later event, earlier can not block us, no need to check again */
649 if (loop_event
->seqnum
< event
->delaying_seqnum
)
652 /* event we checked earlier still exists, no need to check again */
653 if (loop_event
->seqnum
== event
->delaying_seqnum
)
656 /* found ourself, no later event can block us */
657 if (loop_event
->seqnum
>= event
->seqnum
)
660 /* check major/minor */
661 if (major(event
->devnum
) != 0 && event
->devnum
== loop_event
->devnum
&& event
->is_block
== loop_event
->is_block
)
664 /* check network device ifindex */
665 if (event
->ifindex
!= 0 && event
->ifindex
== loop_event
->ifindex
)
668 /* check our old name */
669 if (event
->devpath_old
!= NULL
&& streq(loop_event
->devpath
, event
->devpath_old
)) {
670 event
->delaying_seqnum
= loop_event
->seqnum
;
674 /* compare devpath */
675 common
= MIN(loop_event
->devpath_len
, event
->devpath_len
);
677 /* one devpath is contained in the other? */
678 if (memcmp(loop_event
->devpath
, event
->devpath
, common
) != 0)
681 /* identical device event found */
682 if (loop_event
->devpath_len
== event
->devpath_len
) {
683 /* devices names might have changed/swapped in the meantime */
684 if (major(event
->devnum
) != 0 && (event
->devnum
!= loop_event
->devnum
|| event
->is_block
!= loop_event
->is_block
))
686 if (event
->ifindex
!= 0 && event
->ifindex
!= loop_event
->ifindex
)
688 event
->delaying_seqnum
= loop_event
->seqnum
;
692 /* parent device event found */
693 if (event
->devpath
[common
] == '/') {
694 event
->delaying_seqnum
= loop_event
->seqnum
;
698 /* child device event found */
699 if (loop_event
->devpath
[common
] == '/') {
700 event
->delaying_seqnum
= loop_event
->seqnum
;
704 /* no matching device */
711 static int on_exit_timeout(sd_event_source
*s
, uint64_t usec
, void *userdata
) {
712 Manager
*manager
= userdata
;
716 log_error_errno(ETIMEDOUT
, "giving up waiting for workers to finish");
718 sd_event_exit(manager
->event
, -ETIMEDOUT
);
723 static void manager_exit(Manager
*manager
) {
729 manager
->exit
= true;
733 "STATUS=Starting shutdown...");
735 /* close sources of new events and discard buffered events */
736 manager
->ctrl_event
= sd_event_source_unref(manager
->ctrl_event
);
737 manager
->ctrl
= udev_ctrl_unref(manager
->ctrl
);
739 manager
->inotify_event
= sd_event_source_unref(manager
->inotify_event
);
740 manager
->fd_inotify
= safe_close(manager
->fd_inotify
);
742 manager
->uevent_event
= sd_event_source_unref(manager
->uevent_event
);
743 manager
->monitor
= udev_monitor_unref(manager
->monitor
);
745 /* discard queued events and kill workers */
746 event_queue_cleanup(manager
, EVENT_QUEUED
);
747 manager_kill_workers(manager
);
749 assert_se(sd_event_now(manager
->event
, clock_boottime_or_monotonic(), &usec
) >= 0);
751 r
= sd_event_add_time(manager
->event
, NULL
, clock_boottime_or_monotonic(),
752 usec
+ 30 * USEC_PER_SEC
, USEC_PER_SEC
, on_exit_timeout
, manager
);
757 /* reload requested, HUP signal received, rules changed, builtin changed */
758 static void manager_reload(Manager
*manager
) {
764 "STATUS=Flushing configuration...");
766 manager_kill_workers(manager
);
767 manager
->rules
= udev_rules_unref(manager
->rules
);
768 udev_builtin_exit(manager
->udev
);
772 "STATUS=Processing...");
775 static void event_queue_start(Manager
*manager
) {
776 struct udev_list_node
*loop
;
781 if (udev_list_node_is_empty(&manager
->events
) ||
782 manager
->exit
|| manager
->stop_exec_queue
)
785 assert_se(sd_event_now(manager
->event
, clock_boottime_or_monotonic(), &usec
) >= 0);
786 /* check for changed config, every 3 seconds at most */
787 if (manager
->last_usec
== 0 ||
788 (usec
- manager
->last_usec
) > 3 * USEC_PER_SEC
) {
789 if (udev_rules_check_timestamp(manager
->rules
) ||
790 udev_builtin_validate(manager
->udev
))
791 manager_reload(manager
);
793 manager
->last_usec
= usec
;
796 udev_builtin_init(manager
->udev
);
798 if (!manager
->rules
) {
799 manager
->rules
= udev_rules_new(manager
->udev
, arg_resolve_names
);
804 udev_list_node_foreach(loop
, &manager
->events
) {
805 struct event
*event
= node_to_event(loop
);
807 if (event
->state
!= EVENT_QUEUED
)
810 /* do not start event if parent or child event is still running */
811 if (is_devpath_busy(manager
, event
))
814 event_run(manager
, event
);
818 static void event_queue_cleanup(Manager
*manager
, enum event_state match_type
) {
819 struct udev_list_node
*loop
, *tmp
;
821 udev_list_node_foreach_safe(loop
, tmp
, &manager
->events
) {
822 struct event
*event
= node_to_event(loop
);
824 if (match_type
!= EVENT_UNDEF
&& match_type
!= event
->state
)
831 static int on_worker(sd_event_source
*s
, int fd
, uint32_t revents
, void *userdata
) {
832 Manager
*manager
= userdata
;
837 struct worker_message msg
;
838 struct iovec iovec
= {
840 .iov_len
= sizeof(msg
),
843 struct cmsghdr cmsghdr
;
844 uint8_t buf
[CMSG_SPACE(sizeof(struct ucred
))];
846 struct msghdr msghdr
= {
849 .msg_control
= &control
,
850 .msg_controllen
= sizeof(control
),
852 struct cmsghdr
*cmsg
;
854 struct ucred
*ucred
= NULL
;
855 struct worker
*worker
;
857 size
= recvmsg(fd
, &msghdr
, MSG_DONTWAIT
);
861 else if (errno
== EAGAIN
)
862 /* nothing more to read */
865 return log_error_errno(errno
, "failed to receive message: %m");
866 } else if (size
!= sizeof(struct worker_message
)) {
867 log_warning_errno(EIO
, "ignoring worker message with invalid size %zi bytes", size
);
871 CMSG_FOREACH(cmsg
, &msghdr
) {
872 if (cmsg
->cmsg_level
== SOL_SOCKET
&&
873 cmsg
->cmsg_type
== SCM_CREDENTIALS
&&
874 cmsg
->cmsg_len
== CMSG_LEN(sizeof(struct ucred
)))
875 ucred
= (struct ucred
*) CMSG_DATA(cmsg
);
878 if (!ucred
|| ucred
->pid
<= 0) {
879 log_warning_errno(EIO
, "ignoring worker message without valid PID");
883 /* lookup worker who sent the signal */
884 worker
= hashmap_get(manager
->workers
, UINT_TO_PTR(ucred
->pid
));
886 log_debug("worker ["PID_FMT
"] returned, but is no longer tracked", ucred
->pid
);
890 if (worker
->state
!= WORKER_KILLED
)
891 worker
->state
= WORKER_IDLE
;
893 /* worker returned */
894 event_free(worker
->event
);
897 /* we have free workers, try to schedule events */
898 event_queue_start(manager
);
903 static int on_uevent(sd_event_source
*s
, int fd
, uint32_t revents
, void *userdata
) {
904 Manager
*manager
= userdata
;
905 struct udev_device
*dev
;
910 dev
= udev_monitor_receive_device(manager
->monitor
);
912 udev_device_ensure_usec_initialized(dev
, NULL
);
913 r
= event_queue_insert(manager
, dev
);
915 udev_device_unref(dev
);
917 /* we have fresh events, try to schedule them */
918 event_queue_start(manager
);
924 /* receive the udevd message from userspace */
925 static int on_ctrl_msg(sd_event_source
*s
, int fd
, uint32_t revents
, void *userdata
) {
926 Manager
*manager
= userdata
;
927 _cleanup_udev_ctrl_connection_unref_
struct udev_ctrl_connection
*ctrl_conn
= NULL
;
928 _cleanup_udev_ctrl_msg_unref_
struct udev_ctrl_msg
*ctrl_msg
= NULL
;
934 ctrl_conn
= udev_ctrl_get_connection(manager
->ctrl
);
938 ctrl_msg
= udev_ctrl_receive_msg(ctrl_conn
);
942 i
= udev_ctrl_get_set_log_level(ctrl_msg
);
944 log_debug("udevd message (SET_LOG_LEVEL) received, log_priority=%i", i
);
945 log_set_max_level(i
);
946 manager_kill_workers(manager
);
949 if (udev_ctrl_get_stop_exec_queue(ctrl_msg
) > 0) {
950 log_debug("udevd message (STOP_EXEC_QUEUE) received");
951 manager
->stop_exec_queue
= true;
954 if (udev_ctrl_get_start_exec_queue(ctrl_msg
) > 0) {
955 log_debug("udevd message (START_EXEC_QUEUE) received");
956 manager
->stop_exec_queue
= false;
957 event_queue_start(manager
);
960 if (udev_ctrl_get_reload(ctrl_msg
) > 0) {
961 log_debug("udevd message (RELOAD) received");
962 manager_reload(manager
);
965 str
= udev_ctrl_get_set_env(ctrl_msg
);
967 _cleanup_free_
char *key
= NULL
;
973 val
= strchr(key
, '=');
977 if (val
[0] == '\0') {
978 log_debug("udevd message (ENV) received, unset '%s'", key
);
979 udev_list_entry_add(&manager
->properties
, key
, NULL
);
981 log_debug("udevd message (ENV) received, set '%s=%s'", key
, val
);
982 udev_list_entry_add(&manager
->properties
, key
, val
);
985 log_error("wrong key format '%s'", key
);
987 manager_kill_workers(manager
);
990 i
= udev_ctrl_get_set_children_max(ctrl_msg
);
992 log_debug("udevd message (SET_MAX_CHILDREN) received, children_max=%i", i
);
993 arg_children_max
= i
;
996 if (udev_ctrl_get_ping(ctrl_msg
) > 0)
997 log_debug("udevd message (SYNC) received");
999 if (udev_ctrl_get_exit(ctrl_msg
) > 0) {
1000 log_debug("udevd message (EXIT) received");
1001 manager_exit(manager
);
1002 /* keep reference to block the client until we exit
1003 TODO: deal with several blocking exit requests */
1004 manager
->ctrl_conn_blocking
= udev_ctrl_connection_ref(ctrl_conn
);
1010 static int synthesize_change(struct udev_device
*dev
) {
1011 char filename
[UTIL_PATH_SIZE
];
1014 if (streq_ptr("block", udev_device_get_subsystem(dev
)) &&
1015 streq_ptr("disk", udev_device_get_devtype(dev
)) &&
1016 !startswith(udev_device_get_sysname(dev
), "dm-")) {
1017 bool part_table_read
= false;
1018 bool has_partitions
= false;
1020 struct udev
*udev
= udev_device_get_udev(dev
);
1021 _cleanup_udev_enumerate_unref_
struct udev_enumerate
*e
= NULL
;
1022 struct udev_list_entry
*item
;
1025 * Try to re-read the partition table. This only succeeds if
1026 * none of the devices is busy. The kernel returns 0 if no
1027 * partition table is found, and we will not get an event for
1030 fd
= open(udev_device_get_devnode(dev
), O_RDONLY
|O_CLOEXEC
|O_NOFOLLOW
|O_NONBLOCK
);
1032 r
= flock(fd
, LOCK_EX
|LOCK_NB
);
1034 r
= ioctl(fd
, BLKRRPART
, 0);
1038 part_table_read
= true;
1041 /* search for partitions */
1042 e
= udev_enumerate_new(udev
);
1046 r
= udev_enumerate_add_match_parent(e
, dev
);
1050 r
= udev_enumerate_add_match_subsystem(e
, "block");
1054 r
= udev_enumerate_scan_devices(e
);
1058 udev_list_entry_foreach(item
, udev_enumerate_get_list_entry(e
)) {
1059 _cleanup_udev_device_unref_
struct udev_device
*d
= NULL
;
1061 d
= udev_device_new_from_syspath(udev
, udev_list_entry_get_name(item
));
1065 if (!streq_ptr("partition", udev_device_get_devtype(d
)))
1068 has_partitions
= true;
1073 * We have partitions and re-read the table, the kernel already sent
1074 * out a "change" event for the disk, and "remove/add" for all
1077 if (part_table_read
&& has_partitions
)
1081 * We have partitions but re-reading the partition table did not
1082 * work, synthesize "change" for the disk and all partitions.
1084 log_debug("device %s closed, synthesising 'change'", udev_device_get_devnode(dev
));
1085 strscpyl(filename
, sizeof(filename
), udev_device_get_syspath(dev
), "/uevent", NULL
);
1086 write_string_file(filename
, "change", WRITE_STRING_FILE_CREATE
);
1088 udev_list_entry_foreach(item
, udev_enumerate_get_list_entry(e
)) {
1089 _cleanup_udev_device_unref_
struct udev_device
*d
= NULL
;
1091 d
= udev_device_new_from_syspath(udev
, udev_list_entry_get_name(item
));
1095 if (!streq_ptr("partition", udev_device_get_devtype(d
)))
1098 log_debug("device %s closed, synthesising partition '%s' 'change'",
1099 udev_device_get_devnode(dev
), udev_device_get_devnode(d
));
1100 strscpyl(filename
, sizeof(filename
), udev_device_get_syspath(d
), "/uevent", NULL
);
1101 write_string_file(filename
, "change", WRITE_STRING_FILE_CREATE
);
1107 log_debug("device %s closed, synthesising 'change'", udev_device_get_devnode(dev
));
1108 strscpyl(filename
, sizeof(filename
), udev_device_get_syspath(dev
), "/uevent", NULL
);
1109 write_string_file(filename
, "change", WRITE_STRING_FILE_CREATE
);
1114 static int on_inotify(sd_event_source
*s
, int fd
, uint32_t revents
, void *userdata
) {
1115 Manager
*manager
= userdata
;
1116 union inotify_event_buffer buffer
;
1117 struct inotify_event
*e
;
1122 l
= read(fd
, &buffer
, sizeof(buffer
));
1124 if (errno
== EAGAIN
|| errno
== EINTR
)
1127 return log_error_errno(errno
, "Failed to read inotify fd: %m");
1130 FOREACH_INOTIFY_EVENT(e
, buffer
, l
) {
1131 _cleanup_udev_device_unref_
struct udev_device
*dev
= NULL
;
1133 dev
= udev_watch_lookup(manager
->udev
, e
->wd
);
1137 log_debug("inotify event: %x for %s", e
->mask
, udev_device_get_devnode(dev
));
1138 if (e
->mask
& IN_CLOSE_WRITE
) {
1139 synthesize_change(dev
);
1141 /* settle might be waiting on us to determine the queue
1142 * state. If we just handled an inotify event, we might have
1143 * generated a "change" event, but we won't have queued up
1144 * the resultant uevent yet. Do that.
1146 on_uevent(NULL
, -1, 0, manager
);
1147 } else if (e
->mask
& IN_IGNORED
)
1148 udev_watch_end(manager
->udev
, dev
);
1154 static int on_sigterm(sd_event_source
*s
, const struct signalfd_siginfo
*si
, void *userdata
) {
1155 Manager
*manager
= userdata
;
1159 manager_exit(manager
);
1164 static int on_sighup(sd_event_source
*s
, const struct signalfd_siginfo
*si
, void *userdata
) {
1165 Manager
*manager
= userdata
;
1169 manager_reload(manager
);
1174 static int on_sigchld(sd_event_source
*s
, const struct signalfd_siginfo
*si
, void *userdata
) {
1175 Manager
*manager
= userdata
;
1182 struct worker
*worker
;
1184 pid
= waitpid(-1, &status
, WNOHANG
);
1188 worker
= hashmap_get(manager
->workers
, UINT_TO_PTR(pid
));
1190 log_warning("worker ["PID_FMT
"] is unknown, ignoring", pid
);
1194 if (WIFEXITED(status
)) {
1195 if (WEXITSTATUS(status
) == 0)
1196 log_debug("worker ["PID_FMT
"] exited", pid
);
1198 log_warning("worker ["PID_FMT
"] exited with return code %i", pid
, WEXITSTATUS(status
));
1199 } else if (WIFSIGNALED(status
)) {
1200 log_warning("worker ["PID_FMT
"] terminated by signal %i (%s)", pid
, WTERMSIG(status
), strsignal(WTERMSIG(status
)));
1201 } else if (WIFSTOPPED(status
)) {
1202 log_info("worker ["PID_FMT
"] stopped", pid
);
1204 } else if (WIFCONTINUED(status
)) {
1205 log_info("worker ["PID_FMT
"] continued", pid
);
1208 log_warning("worker ["PID_FMT
"] exit with status 0x%04x", pid
, status
);
1210 if (!WIFEXITED(status
) || WEXITSTATUS(status
) != 0) {
1211 if (worker
->event
) {
1212 log_error("worker ["PID_FMT
"] failed while handling '%s'", pid
, worker
->event
->devpath
);
1213 /* delete state from disk */
1214 udev_device_delete_db(worker
->event
->dev
);
1215 udev_device_tag_index(worker
->event
->dev
, NULL
, false);
1216 /* forward kernel event without amending it */
1217 udev_monitor_send_device(manager
->monitor
, NULL
, worker
->event
->dev_kernel
);
1221 worker_free(worker
);
1224 /* we can start new workers, try to schedule events */
1225 event_queue_start(manager
);
1230 static int on_post(sd_event_source
*s
, void *userdata
) {
1231 Manager
*manager
= userdata
;
1236 if (udev_list_node_is_empty(&manager
->events
)) {
1237 /* no pending events */
1238 if (!hashmap_isempty(manager
->workers
)) {
1239 /* there are idle workers */
1240 log_debug("cleanup idle workers");
1241 manager_kill_workers(manager
);
1244 if (manager
->exit
) {
1245 r
= sd_event_exit(manager
->event
, 0);
1248 } else if (manager
->cgroup
)
1249 /* cleanup possible left-over processes in our cgroup */
1250 cg_kill(SYSTEMD_CGROUP_CONTROLLER
, manager
->cgroup
, SIGKILL
, false, true, NULL
);
1257 static int listen_fds(int *rctrl
, int *rnetlink
) {
1258 _cleanup_udev_unref_
struct udev
*udev
= NULL
;
1259 int ctrl_fd
= -1, netlink_fd
= -1;
1265 n
= sd_listen_fds(true);
1269 for (fd
= SD_LISTEN_FDS_START
; fd
< n
+ SD_LISTEN_FDS_START
; fd
++) {
1270 if (sd_is_socket(fd
, AF_LOCAL
, SOCK_SEQPACKET
, -1)) {
1277 if (sd_is_socket(fd
, AF_NETLINK
, SOCK_RAW
, -1)) {
1278 if (netlink_fd
>= 0)
1288 _cleanup_udev_ctrl_unref_
struct udev_ctrl
*ctrl
= NULL
;
1294 ctrl
= udev_ctrl_new(udev
);
1296 return log_error_errno(EINVAL
, "error initializing udev control socket");
1298 r
= udev_ctrl_enable_receiving(ctrl
);
1300 return log_error_errno(EINVAL
, "error binding udev control socket");
1302 fd
= udev_ctrl_get_fd(ctrl
);
1304 return log_error_errno(EIO
, "could not get ctrl fd");
1306 ctrl_fd
= fcntl(fd
, F_DUPFD_CLOEXEC
, 3);
1308 return log_error_errno(errno
, "could not dup ctrl fd: %m");
1311 if (netlink_fd
< 0) {
1312 _cleanup_udev_monitor_unref_
struct udev_monitor
*monitor
= NULL
;
1320 monitor
= udev_monitor_new_from_netlink(udev
, "kernel");
1322 return log_error_errno(EINVAL
, "error initializing netlink socket");
1324 (void) udev_monitor_set_receive_buffer_size(monitor
, 128 * 1024 * 1024);
1326 r
= udev_monitor_enable_receiving(monitor
);
1328 return log_error_errno(EINVAL
, "error binding netlink socket");
1330 fd
= udev_monitor_get_fd(monitor
);
1332 return log_error_errno(netlink_fd
, "could not get uevent fd: %m");
1334 netlink_fd
= fcntl(fd
, F_DUPFD_CLOEXEC
, 3);
1336 return log_error_errno(errno
, "could not dup netlink fd: %m");
1340 *rnetlink
= netlink_fd
;
1346 * read the kernel command line, in case we need to get into debug mode
1347 * udev.log-priority=<level> syslog priority
1348 * udev.children-max=<number of workers> events are fully serialized if set to 1
1349 * udev.exec-delay=<number of seconds> delay execution of every executed program
1350 * udev.event-timeout=<number of seconds> seconds to wait before terminating an event
1352 static int parse_proc_cmdline_item(const char *key
, const char *value
) {
1353 const char *full_key
= key
;
1361 if (startswith(key
, "rd."))
1362 key
+= strlen("rd.");
1364 if (startswith(key
, "udev."))
1365 key
+= strlen("udev.");
1369 if (streq(key
, "log-priority")) {
1372 prio
= util_log_priority(value
);
1375 log_set_max_level(prio
);
1376 } else if (streq(key
, "children-max")) {
1377 r
= safe_atou(value
, &arg_children_max
);
1380 } else if (streq(key
, "exec-delay")) {
1381 r
= safe_atoi(value
, &arg_exec_delay
);
1384 } else if (streq(key
, "event-timeout")) {
1385 r
= safe_atou64(value
, &arg_event_timeout_usec
);
1388 arg_event_timeout_usec
*= USEC_PER_SEC
;
1389 arg_event_timeout_warn_usec
= (arg_event_timeout_usec
/ 3) ? : 1;
1394 log_warning("invalid %s ignored: %s", full_key
, value
);
1398 static void help(void) {
1399 printf("%s [OPTIONS...]\n\n"
1400 "Manages devices.\n\n"
1401 " -h --help Print this message\n"
1402 " --version Print version of the program\n"
1403 " --daemon Detach and run in the background\n"
1404 " --debug Enable debug output\n"
1405 " --children-max=INT Set maximum number of workers\n"
1406 " --exec-delay=SECONDS Seconds to wait before executing RUN=\n"
1407 " --event-timeout=SECONDS Seconds to wait before terminating an event\n"
1408 " --resolve-names=early|late|never\n"
1409 " When to resolve users and groups\n"
1410 , program_invocation_short_name
);
1413 static int parse_argv(int argc
, char *argv
[]) {
1414 static const struct option options
[] = {
1415 { "daemon", no_argument
, NULL
, 'd' },
1416 { "debug", no_argument
, NULL
, 'D' },
1417 { "children-max", required_argument
, NULL
, 'c' },
1418 { "exec-delay", required_argument
, NULL
, 'e' },
1419 { "event-timeout", required_argument
, NULL
, 't' },
1420 { "resolve-names", required_argument
, NULL
, 'N' },
1421 { "help", no_argument
, NULL
, 'h' },
1422 { "version", no_argument
, NULL
, 'V' },
1431 while ((c
= getopt_long(argc
, argv
, "c:de:Dt:N:hV", options
, NULL
)) >= 0) {
1437 arg_daemonize
= true;
1440 r
= safe_atou(optarg
, &arg_children_max
);
1442 log_warning("Invalid --children-max ignored: %s", optarg
);
1445 r
= safe_atoi(optarg
, &arg_exec_delay
);
1447 log_warning("Invalid --exec-delay ignored: %s", optarg
);
1450 r
= safe_atou64(optarg
, &arg_event_timeout_usec
);
1452 log_warning("Invalid --event-timeout ignored: %s", optarg
);
1454 arg_event_timeout_usec
*= USEC_PER_SEC
;
1455 arg_event_timeout_warn_usec
= (arg_event_timeout_usec
/ 3) ? : 1;
1462 if (streq(optarg
, "early")) {
1463 arg_resolve_names
= 1;
1464 } else if (streq(optarg
, "late")) {
1465 arg_resolve_names
= 0;
1466 } else if (streq(optarg
, "never")) {
1467 arg_resolve_names
= -1;
1469 log_error("resolve-names must be early, late or never");
1477 printf("%s\n", VERSION
);
1482 assert_not_reached("Unhandled option");
1490 static int manager_new(Manager
**ret
, int fd_ctrl
, int fd_uevent
, const char *cgroup
) {
1491 _cleanup_(manager_freep
) Manager
*manager
= NULL
;
1492 int r
, fd_worker
, one
= 1;
1495 assert(fd_ctrl
>= 0);
1496 assert(fd_uevent
>= 0);
1498 manager
= new0(Manager
, 1);
1502 manager
->fd_inotify
= -1;
1503 manager
->worker_watch
[WRITE_END
] = -1;
1504 manager
->worker_watch
[READ_END
] = -1;
1506 manager
->udev
= udev_new();
1508 return log_error_errno(errno
, "could not allocate udev context: %m");
1510 udev_builtin_init(manager
->udev
);
1512 manager
->rules
= udev_rules_new(manager
->udev
, arg_resolve_names
);
1513 if (!manager
->rules
)
1514 return log_error_errno(ENOMEM
, "error reading rules");
1516 udev_list_node_init(&manager
->events
);
1517 udev_list_init(manager
->udev
, &manager
->properties
, true);
1519 manager
->cgroup
= cgroup
;
1521 manager
->ctrl
= udev_ctrl_new_from_fd(manager
->udev
, fd_ctrl
);
1523 return log_error_errno(EINVAL
, "error taking over udev control socket");
1525 manager
->monitor
= udev_monitor_new_from_netlink_fd(manager
->udev
, "kernel", fd_uevent
);
1526 if (!manager
->monitor
)
1527 return log_error_errno(EINVAL
, "error taking over netlink socket");
1529 /* unnamed socket from workers to the main daemon */
1530 r
= socketpair(AF_LOCAL
, SOCK_DGRAM
|SOCK_CLOEXEC
, 0, manager
->worker_watch
);
1532 return log_error_errno(errno
, "error creating socketpair: %m");
1534 fd_worker
= manager
->worker_watch
[READ_END
];
1536 r
= setsockopt(fd_worker
, SOL_SOCKET
, SO_PASSCRED
, &one
, sizeof(one
));
1538 return log_error_errno(errno
, "could not enable SO_PASSCRED: %m");
1540 manager
->fd_inotify
= udev_watch_init(manager
->udev
);
1541 if (manager
->fd_inotify
< 0)
1542 return log_error_errno(ENOMEM
, "error initializing inotify");
1544 udev_watch_restore(manager
->udev
);
1546 /* block and listen to all signals on signalfd */
1547 assert_se(sigprocmask_many(SIG_BLOCK
, NULL
, SIGTERM
, SIGINT
, SIGHUP
, SIGCHLD
, -1) >= 0);
1549 r
= sd_event_default(&manager
->event
);
1551 return log_error_errno(errno
, "could not allocate event loop: %m");
1553 r
= sd_event_add_signal(manager
->event
, NULL
, SIGINT
, on_sigterm
, manager
);
1555 return log_error_errno(r
, "error creating sigint event source: %m");
1557 r
= sd_event_add_signal(manager
->event
, NULL
, SIGTERM
, on_sigterm
, manager
);
1559 return log_error_errno(r
, "error creating sigterm event source: %m");
1561 r
= sd_event_add_signal(manager
->event
, NULL
, SIGHUP
, on_sighup
, manager
);
1563 return log_error_errno(r
, "error creating sighup event source: %m");
1565 r
= sd_event_add_signal(manager
->event
, NULL
, SIGCHLD
, on_sigchld
, manager
);
1567 return log_error_errno(r
, "error creating sigchld event source: %m");
1569 r
= sd_event_set_watchdog(manager
->event
, true);
1571 return log_error_errno(r
, "error creating watchdog event source: %m");
1573 r
= sd_event_add_io(manager
->event
, &manager
->ctrl_event
, fd_ctrl
, EPOLLIN
, on_ctrl_msg
, manager
);
1575 return log_error_errno(r
, "error creating ctrl event source: %m");
1577 /* This needs to be after the inotify and uevent handling, to make sure
1578 * that the ping is send back after fully processing the pending uevents
1579 * (including the synthetic ones we may create due to inotify events).
1581 r
= sd_event_source_set_priority(manager
->ctrl_event
, SD_EVENT_PRIORITY_IDLE
);
1583 return log_error_errno(r
, "cold not set IDLE event priority for ctrl event source: %m");
1585 r
= sd_event_add_io(manager
->event
, &manager
->inotify_event
, manager
->fd_inotify
, EPOLLIN
, on_inotify
, manager
);
1587 return log_error_errno(r
, "error creating inotify event source: %m");
1589 r
= sd_event_add_io(manager
->event
, &manager
->uevent_event
, fd_uevent
, EPOLLIN
, on_uevent
, manager
);
1591 return log_error_errno(r
, "error creating uevent event source: %m");
1593 r
= sd_event_add_io(manager
->event
, NULL
, fd_worker
, EPOLLIN
, on_worker
, manager
);
1595 return log_error_errno(r
, "error creating worker event source: %m");
1597 r
= sd_event_add_post(manager
->event
, NULL
, on_post
, manager
);
1599 return log_error_errno(r
, "error creating post event source: %m");
1607 static int run(int fd_ctrl
, int fd_uevent
, const char *cgroup
) {
1608 _cleanup_(manager_freep
) Manager
*manager
= NULL
;
1611 r
= manager_new(&manager
, fd_ctrl
, fd_uevent
, cgroup
);
1613 r
= log_error_errno(r
, "failed to allocate manager object: %m");
1617 r
= udev_rules_apply_static_dev_perms(manager
->rules
);
1619 log_error_errno(r
, "failed to apply permissions on static device nodes: %m");
1621 (void) sd_notify(false,
1623 "STATUS=Processing...");
1625 r
= sd_event_loop(manager
->event
);
1627 log_error_errno(r
, "event loop failed: %m");
1631 sd_event_get_exit_code(manager
->event
, &r
);
1636 "STATUS=Shutting down...");
1638 udev_ctrl_cleanup(manager
->ctrl
);
1642 int main(int argc
, char *argv
[]) {
1643 _cleanup_free_
char *cgroup
= NULL
;
1644 int r
, fd_ctrl
, fd_uevent
;
1646 log_set_target(LOG_TARGET_AUTO
);
1647 log_parse_environment();
1650 r
= parse_argv(argc
, argv
);
1654 r
= parse_proc_cmdline(parse_proc_cmdline_item
);
1656 log_warning_errno(r
, "failed to parse kernel command line, ignoring: %m");
1659 log_set_target(LOG_TARGET_CONSOLE
);
1660 log_set_max_level(LOG_DEBUG
);
1663 if (getuid() != 0) {
1664 r
= log_error_errno(EPERM
, "root privileges required");
1668 if (arg_children_max
== 0) {
1671 arg_children_max
= 8;
1673 if (sched_getaffinity(0, sizeof(cpu_set
), &cpu_set
) == 0)
1674 arg_children_max
+= CPU_COUNT(&cpu_set
) * 2;
1676 log_debug("set children_max to %u", arg_children_max
);
1679 /* set umask before creating any file/directory */
1682 r
= log_error_errno(errno
, "could not change dir to /: %m");
1688 r
= mac_selinux_init("/dev");
1690 log_error_errno(r
, "could not initialize labelling: %m");
1694 r
= mkdir("/run/udev", 0755);
1695 if (r
< 0 && errno
!= EEXIST
) {
1696 r
= log_error_errno(errno
, "could not create /run/udev: %m");
1700 dev_setup(NULL
, UID_INVALID
, GID_INVALID
);
1702 if (getppid() == 1) {
1703 /* get our own cgroup, we regularly kill everything udev has left behind
1704 we only do this on systemd systems, and only if we are directly spawned
1705 by PID1. otherwise we are not guaranteed to have a dedicated cgroup */
1706 r
= cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER
, 0, &cgroup
);
1708 if (r
== -ENOENT
|| r
== -ENOEXEC
)
1709 log_debug_errno(r
, "did not find dedicated cgroup: %m");
1711 log_warning_errno(r
, "failed to get cgroup: %m");
1715 r
= listen_fds(&fd_ctrl
, &fd_uevent
);
1717 r
= log_error_errno(r
, "could not listen on fds: %m");
1721 if (arg_daemonize
) {
1724 log_info("starting version " VERSION
);
1726 /* connect /dev/null to stdin, stdout, stderr */
1727 if (log_get_max_level() < LOG_DEBUG
)
1728 (void) make_null_stdio();
1735 r
= log_error_errno(errno
, "fork of daemon failed: %m");
1738 mac_selinux_finish();
1740 _exit(EXIT_SUCCESS
);
1745 write_string_file("/proc/self/oom_score_adj", "-1000", 0);
1748 r
= run(fd_ctrl
, fd_uevent
, cgroup
);
1751 mac_selinux_finish();
1753 return r
< 0 ? EXIT_FAILURE
: EXIT_SUCCESS
;