udev-ctrl: enable SO_PASSCREDS on listening socket already rather than on accept()

This matches what systemd-udevd-control.socket does.
This commit is contained in:
Mike Yuan
2025-06-17 13:16:07 +02:00
parent 9453a92ad7
commit 58f3be82ce
+6 -5
View File
@@ -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");