]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: do not modify socket option(s) if socket is passed by PID1
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 14 Dec 2018 00:28:29 +0000 (09:28 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 14 Dec 2018 00:28:33 +0000 (09:28 +0900)
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

index 623e004fedfd213251a27426f77ce23a1e4e05b5..21dfb2bf39c9eeaedfd0c934f986a325c6dc081f 100644 (file)
@@ -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;
 }