From 589adfee2d9c0de0b6d2f91f73abc7f8800d2ced Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Feb 2020 12:54:53 -0700 Subject: [PATCH] Only keepalive if accept() succeeded; coverity CID 207990 --- logsrvd/logsrvd.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index aab6e8c94..d2f003a3f 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -1517,6 +1517,15 @@ listener_cb(int fd, int what, void *v) sock = accept(fd, &s_un.sa, &salen); if (sock != -1) { + /* set keepalive socket option on socket returned by accept */ + if (logsrvd_conf_tcp_keepalive()) { + int keepalive = 1; + if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keepalive, + sizeof(keepalive)) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to set SO_KEEPALIVE option"); + } + } if (!new_connection(sock, &s_un.sa, base)) { /* TODO: pause accepting on ENOMEM */ sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, @@ -1530,16 +1539,6 @@ listener_cb(int fd, int what, void *v) /* TODO: pause accepting on ENFILE and EMFILE */ } - /* set keepalive socket option on socket returned by accept */ - if (logsrvd_conf_tcp_keepalive()) { - int keepalive = 1; - if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keepalive, - sizeof(keepalive)) == -1) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, - "unable to set SO_KEEPALIVE option"); - } - } - debug_return; }