From: Yu Watanabe Date: Fri, 14 Dec 2018 00:28:29 +0000 (+0900) Subject: sd-device: do not modify socket option(s) if socket is passed by PID1 X-Git-Tag: v240~42^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c821e84ac70186a72a8951289c008025d656000f;p=thirdparty%2Fsystemd.git sd-device: do not modify socket option(s) if socket is passed by PID1 If the socket fd is passed by PID1, then it is created by .socket unit and we have already set sufficient option(s) for the socket. So, let's not touch the passed socket. --- diff --git a/src/libsystemd/sd-device/device-monitor.c b/src/libsystemd/sd-device/device-monitor.c index 623e004fedf..21dfb2bf39c 100644 --- a/src/libsystemd/sd-device/device-monitor.c +++ b/src/libsystemd/sd-device/device-monitor.c @@ -275,20 +275,20 @@ int device_monitor_enable_receiving(sd_device_monitor *m) { return log_debug_errno(r, "sd-device-monitor: Failed to update filter: %m"); if (!m->bound) { + /* enable receiving of sender credentials */ + r = setsockopt_int(m->sock, SOL_SOCKET, SO_PASSCRED, true); + if (r < 0) + return log_debug_errno(r, "sd-device-monitor: Failed to set socket option SO_PASSCRED: %m"); + if (bind(m->sock, &m->snl.sa, sizeof(struct sockaddr_nl)) < 0) return log_debug_errno(errno, "sd-device-monitor: Failed to bind monitoring socket: %m"); m->bound = true; - } - - r = monitor_set_nl_address(m); - if (r < 0) - return log_debug_errno(r, "sd-device-monitor: Failed to set address: %m"); - /* enable receiving of sender credentials */ - r = setsockopt_int(m->sock, SOL_SOCKET, SO_PASSCRED, true); - if (r < 0) - return log_debug_errno(r, "sd-device-monitor: Failed to set socket option SO_PASSCRED: %m"); + r = monitor_set_nl_address(m); + if (r < 0) + return log_debug_errno(r, "sd-device-monitor: Failed to set address: %m"); + } return 0; }