From c821e84ac70186a72a8951289c008025d656000f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 14 Dec 2018 09:28:29 +0900 Subject: [PATCH] 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. --- src/libsystemd/sd-device/device-monitor.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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; } -- 2.47.3