Message ID | 20240628172836.19213-1-cosiekvfj@o2.pl (mailing list archive) |
---|---|
State | Rejected |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net/socket: clamp negative backlog value to 0 in listen() | expand |
From Kacper Piwiński <cosiekvfj@o2.pl> Date: Fri, 28 Jun 2024 19:28:36 +0200 > According to manual: https://man7.org/linux/man-pages/man3/listen.3p.html > If listen() is called with a backlog argument value that is less > than 0, the function behaves as if it had been called with a > backlog argument value of 0. This breaks many applications that assume listen(fd, -1) configures the backlog with the max value allowed in the netns. The behaviour is useful especially in a container-like env where app does not have access to procfs. The man page should be updated instead. > > Signed-off-by: Kacper Piwiński <cosiekvfj@o2.pl> > --- > net/socket.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/net/socket.c b/net/socket.c > index e416920e9..9567223d7 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -1873,8 +1873,7 @@ int __sys_listen(int fd, int backlog) > sock = sockfd_lookup_light(fd, &err, &fput_needed); > if (sock) { > somaxconn = READ_ONCE(sock_net(sock->sk)->core.sysctl_somaxconn); > - if ((unsigned int)backlog > somaxconn) > - backlog = somaxconn; > + backlog = clamp(backlog, 0, somaxconn); > > err = security_socket_listen(sock, backlog); > if (!err) > --
diff --git a/net/socket.c b/net/socket.c index e416920e9..9567223d7 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1873,8 +1873,7 @@ int __sys_listen(int fd, int backlog) sock = sockfd_lookup_light(fd, &err, &fput_needed); if (sock) { somaxconn = READ_ONCE(sock_net(sock->sk)->core.sysctl_somaxconn); - if ((unsigned int)backlog > somaxconn) - backlog = somaxconn; + backlog = clamp(backlog, 0, somaxconn); err = security_socket_listen(sock, backlog); if (!err)
According to manual: https://man7.org/linux/man-pages/man3/listen.3p.html If listen() is called with a backlog argument value that is less than 0, the function behaves as if it had been called with a backlog argument value of 0. Signed-off-by: Kacper Piwiński <cosiekvfj@o2.pl> --- net/socket.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)