]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: do not change buffer size if the socket is already bound 11077/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 8 Dec 2018 09:50:40 +0000 (18:50 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 14 Dec 2018 00:33:06 +0000 (09:33 +0900)
From the results of CIs in #11076, changing buffer size may cause
issue #10754. So, let's prohibit to change the size if it is already
bound.

This also reverts commit 986ab0d2dc161dfa026e8fc7a609f9efb8cb4397.

src/libsystemd/sd-device/device-monitor.c
src/udev/udevd.c

index 21dfb2bf39c9eeaedfd0c934f986a325c6dc081f..b86932663e753c3a1fd6f56647d7b77de773ac1a 100644 (file)
@@ -93,6 +93,12 @@ _public_ int sd_device_monitor_set_receive_buffer_size(sd_device_monitor *m, siz
         assert_return(m, -EINVAL);
         assert_return((size_t) n == size, -EINVAL);
 
+        if (m->bound)
+                return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                       "sd-device-monitor: Socket fd is already bound. "
+                                       "It may be dangerous to change buffer size. "
+                                       "Refusing to change buffer size.");
+
         if (setsockopt_int(m->sock, SOL_SOCKET, SO_RCVBUF, n) < 0) {
                 r = setsockopt_int(m->sock, SOL_SOCKET, SO_RCVBUFFORCE, n);
                 if (r < 0)
index fa85f6e2632dc10f74bb15c922d2c3c2901ca4fe..024fa97ad08d647353888b467d65683d5416eac1 100644 (file)
@@ -1630,8 +1630,7 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
         if (r < 0)
                 return log_error_errno(r, "Failed to initialize device monitor: %m");
 
-        if (fd_uevent < 0)
-                (void) sd_device_monitor_set_receive_buffer_size(manager->monitor, 128 * 1024 * 1024);
+        (void) sd_device_monitor_set_receive_buffer_size(manager->monitor, 128 * 1024 * 1024);
 
         /* unnamed socket from workers to the main daemon */
         r = socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch);