From: Mike Yuan Date: Fri, 6 Jun 2025 18:06:45 +0000 (+0200) Subject: udev-ctrl: enable SO_PASSCREDS on listening socket already rather than on accept() X-Git-Tag: v258-rc1~301^2~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=58f3be82cef1d6e03f6c14515c70a39ac072ae4e;p=thirdparty%2Fsystemd.git udev-ctrl: enable SO_PASSCREDS on listening socket already rather than on accept() This matches what systemd-udevd-control.socket does. --- diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 5cde769b1f6..eeaa0c01f3e 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");