[git commit] libbb: set netlink socket revbuf size before binding

Denys Vlasenko vda.linux at googlemail.com
Sun Nov 22 12:12:51 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=12aa68d10fdcc5bd2d9385506d11aed3a0c2eaf1
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

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 <jan at kloetzke.net>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 libbb/xconnect.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

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


More information about the busybox-cvs mailing list