From: William Lallemand Date: Tue, 13 Nov 2018 17:30:12 +0000 (+0100) Subject: BUG/MEDIUM: log: don't CLOEXEC the inherited FDs X-Git-Tag: v1.9-dev7~125 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a8b2671cf6fd2edf1614397aac22db3bd08bba0a;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: log: don't CLOEXEC the inherited FDs When configuring the logs with a FD and using the master worker, the FD was closed upon a reload because it was configured with CLOEXEC. It leads to using the wrong FD for the logs and to close them. Which is unfortunate since the master rely on the FD left opened during a reload. The fix is to stop doing a CLOEXEC when the FD is inherited. No backport needed. --- diff --git a/src/log.c b/src/log.c index f6eeacbec9..8962194686 100644 --- a/src/log.c +++ b/src/log.c @@ -1378,12 +1378,13 @@ void __send_log(struct proxy *p, int level, char *message, size_t size, char *sd nblogger, strerror(errno), errno); } continue; + } else { + /* we don't want to receive anything on this socket */ + setsockopt(*plogfd, SOL_SOCKET, SO_RCVBUF, &zero, sizeof(zero)); + /* does nothing under Linux, maybe needed for others */ + shutdown(*plogfd, SHUT_RD); + fcntl(*plogfd, F_SETFD, fcntl(*plogfd, F_GETFD, FD_CLOEXEC) | FD_CLOEXEC); } - /* we don't want to receive anything on this socket */ - setsockopt(*plogfd, SOL_SOCKET, SO_RCVBUF, &zero, sizeof(zero)); - /* does nothing under Linux, maybe needed for others */ - shutdown(*plogfd, SHUT_RD); - fcntl(*plogfd, F_SETFD, fcntl(*plogfd, F_GETFD, FD_CLOEXEC) | FD_CLOEXEC); } switch (logsrv->format) {