diff --git a/src/libsystemd/sd-device/device-monitor.c b/src/libsystemd/sd-device/device-monitor.c index 21dfb2bf39..b86932663e 100644 --- a/src/libsystemd/sd-device/device-monitor.c +++ b/src/libsystemd/sd-device/device-monitor.c @@ -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) diff --git a/src/udev/udevd.c b/src/udev/udevd.c index fa85f6e263..024fa97ad0 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -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);