From 2ac9c627aa6aa736f3df9f426e741642694ac911 Mon Sep 17 00:00:00 2001 From: Max Romanov Date: Thu, 1 Jul 2021 16:23:51 +0300 Subject: Fixing memory and descriptor leakage in case of port send failure. In rare cases, when the destination process had finished running but no notification of this was received yet, send could fail with an error, and the send message structure with file descriptors could leak. The leakage was periodically reproduced by respawn tests on FreeBSD 12. --- src/nxt_port_socket.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/nxt_port_socket.c b/src/nxt_port_socket.c index 3cf2e79a..843728a4 100644 --- a/src/nxt_port_socket.c +++ b/src/nxt_port_socket.c @@ -524,6 +524,24 @@ next_fragment: } else { if (nxt_slow_path(n == NXT_ERROR)) { + if (msg->link.next == NULL) { + if (msg->close_fd) { + if (msg->fd[0] != -1) { + nxt_fd_close(msg->fd[0]); + + msg->fd[0] = -1; + } + + if (msg->fd[1] != -1) { + nxt_fd_close(msg->fd[1]); + + msg->fd[1] = -1; + } + } + + nxt_port_release_send_msg(msg); + } + goto fail; } -- cgit