diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 5cde769b1f..eeaa0c01f3 100644 --- a/src/udev/udev-ctrl.c +++ b/src/udev/udev-ctrl.c @@ -44,6 +44,7 @@ struct UdevCtrl { int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) { _cleanup_close_ int sock = -EBADF; UdevCtrl *uctrl; + int r; assert(ret); @@ -53,6 +54,11 @@ int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) { return log_error_errno(errno, "Failed to create socket: %m"); } + /* enable receiving of the sender credentials in the messages */ + r = setsockopt_int(fd >= 0 ? fd : sock, SOL_SOCKET, SO_PASSCRED, true); + if (r < 0) + log_warning_errno(r, "Failed to set SO_PASSCRED, ignoring: %m"); + uctrl = new(UdevCtrl, 1); if (!uctrl) return -ENOMEM; @@ -240,11 +246,6 @@ static int udev_ctrl_event_handler(sd_event_source *s, int fd, uint32_t revents, return 0; } - /* enable receiving of the sender credentials in the messages */ - r = setsockopt_int(sock, SOL_SOCKET, SO_PASSCRED, true); - if (r < 0) - log_warning_errno(r, "Failed to set SO_PASSCRED, ignoring: %m"); - r = sd_event_add_io(uctrl->event, &uctrl->event_source_connect, sock, EPOLLIN, udev_ctrl_connection_event_handler, uctrl); if (r < 0) { log_error_errno(r, "Failed to create event source for udev control connection: %m");