Hi, On Sun, Apr 09, 2023 at 01:09:07AM +0200, Pablo Neira Ayuso wrote: > > diff --git a/src/mnl.c b/src/mnl.c > > index 26f943db..ab6750c8 100644 > > --- a/src/mnl.c > > +++ b/src/mnl.c > > @@ -260,6 +260,13 @@ static void mnl_set_sndbuffer(const struct mnl_socket *nl, > > return; > > > > /* Rise sender buffer length to avoid hitting -EMSGSIZE */ > > + if (setsockopt(mnl_socket_get_fd(nl), SOL_SOCKET, SO_SNDBUF, > > + &newbuffsiz, sizeof(socklen_t)) == 0) > > + return; > > setsockopt() with SO_SNDBUF never fails: it trims the newbuffsiz that is > specified by net.core.wmem_max > > This needs to call: > > setsockopt(mnl_socket_get_fd(nl), SOL_SOCKET, SO_SNDBUF, > &newbuffsiz, sizeof(socklen_t)); > > without checking the return value. Otherwise, SO_SNDBUFFORCE is never > going to be called after this patch. This needs a v2. I think this patch should be fine.
diff --git a/src/mnl.c b/src/mnl.c index 26f943dbb4c8..ee62c0c9c2a0 100644 --- a/src/mnl.c +++ b/src/mnl.c @@ -261,8 +261,13 @@ static void mnl_set_sndbuffer(const struct mnl_socket *nl, /* Rise sender buffer length to avoid hitting -EMSGSIZE */ if (setsockopt(mnl_socket_get_fd(nl), SOL_SOCKET, SO_SNDBUFFORCE, - &newbuffsiz, sizeof(socklen_t)) < 0) - return; + &newbuffsiz, sizeof(socklen_t)) < 0) { + /* Fall back to SO_SNDBUF, this never fails, kernel trims down + * the size to net.core.wmem_max. + */ + setsockopt(mnl_socket_get_fd(nl), SOL_SOCKET, SO_SNDBUF, + &newbuffsiz, sizeof(socklen_t)); + } } static unsigned int nlsndbufsiz;