From: Al Viro <[email protected]> Got broken by "make sock_alloc_file() do sock_release() on failures" - cleanup after sock_map_fd() failure got pulled all the way into sock_alloc_file(), but it used to serve the case when sock_map_fd() failed *before* getting to sock_alloc_file() as well, and that got lost. Trivial to fix, fortunately.
Fixes: 8e1611e23579 (make sock_alloc_file() do sock_release() on failures) Reported-by: Dmitry Vyukov <[email protected]> Signed-off-by: Al Viro <[email protected]> We see that lldpad eats all kernel memory on the node with those leaked sockets constantly looping on SyS_socket with EMFILE error. https://jira.sw.ru/browse/PSBM-133610 Signed-off-by: Pavel Tikhomirov <[email protected]> --- Note: already have it in VZ8. --- net/socket.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/socket.c b/net/socket.c index e720aa814acc..bcf98c0f2fb9 100644 --- a/net/socket.c +++ b/net/socket.c @@ -403,8 +403,10 @@ static int sock_map_fd(struct socket *sock, int flags) { struct file *newfile; int fd = get_unused_fd_flags(flags); - if (unlikely(fd < 0)) + if (unlikely(fd < 0)) { + sock_release(sock); return fd; + } newfile = sock_alloc_file(sock, flags, NULL); if (likely(!IS_ERR(newfile))) { -- 2.31.1 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
