From 12aa68d10fdcc5bd2d9385506d11aed3a0c2eaf1 Mon Sep 17 00:00:00 2001 From: Jan Klötzke Date: Mon, 16 Dec 2019 22:56:49 +0100 Subject: libbb: set netlink socket revbuf size before binding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As soon as the socket is bound it will receive messages. Make sure the recieve buffer size is increased before the first message is received. Signed-off-by: Jan Klötzke Signed-off-by: Denys Vlasenko --- libbb/xconnect.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'libbb') diff --git a/libbb/xconnect.c b/libbb/xconnect.c index e9a2470e4..5dd9cfd28 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c @@ -422,17 +422,14 @@ int FAST_FUNC create_and_bind_to_netlink(int proto, int grp, unsigned rcvbuf) struct sockaddr_nl sa; int fd; - memset(&sa, 0, sizeof(sa)); - sa.nl_family = AF_NETLINK; - sa.nl_pid = getpid(); - sa.nl_groups = grp; fd = xsocket(AF_NETLINK, SOCK_DGRAM, proto); - xbind(fd, (struct sockaddr *) &sa, sizeof(sa)); - close_on_exec_on(fd); + /* Set receive buffer size before binding the socket + * We want to have enough space before we start receiving messages. + */ if (rcvbuf != 0) { - // SO_RCVBUFFORCE (root only) can go above net.core.rmem_max sysctl - setsockopt_SOL_SOCKET_int(fd, SO_RCVBUF, rcvbuf); + setsockopt_SOL_SOCKET_int(fd, SO_RCVBUF, rcvbuf); + /* SO_RCVBUFFORCE (root only) can go above net.core.rmem_max */ setsockopt_SOL_SOCKET_int(fd, SO_RCVBUFFORCE, rcvbuf); # if 0 { @@ -444,6 +441,13 @@ int FAST_FUNC create_and_bind_to_netlink(int proto, int grp, unsigned rcvbuf) # endif } + memset(&sa, 0, sizeof(sa)); + sa.nl_family = AF_NETLINK; + sa.nl_pid = getpid(); + sa.nl_groups = grp; + xbind(fd, (struct sockaddr *) &sa, sizeof(sa)); + close_on_exec_on(fd); + return fd; } #endif -- cgit v1.2.3