From: Sergey Bugaev Date: Mon, 22 Mar 2021 15:31:12 +0000 (+0300) Subject: log: protect errno in log_open() X-Git-Tag: v248-2~39^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0e557eef37c9ebcc8f5c19fc6fc44b6fd617cc5d;p=thirdparty%2Fsystemd.git log: protect errno in log_open() Commit 0b1f3c768ce1bd1490a5e53f539976dcef8ca765 has introduced log_open() calls after exec fails post-fork. However, the log_open() call itself could change the value of errno, which, for me, manifested in: $ coredumpctl gdb ... Failed to invoke gdb: Success Fix this by using PROTECT_ERRNO in log_open(). --- diff --git a/src/basic/log.c b/src/basic/log.c index c8cca96bca4..0e6023cff22 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -252,6 +252,13 @@ int log_open(void) { /* Do not call from library code. */ + /* This function is often called in preparation for being able + * to log. Let's make sure we don't clobber errno, so that a call + * to a logging function immediately following a log_open() call + * can still easily reference an error that happened immediately + * before the log_open() call. */ + PROTECT_ERRNO; + /* If we don't use the console we close it here, to not get * killed by SAK. If we don't use syslog we close it here so * that we are not confused by somebody deleting the socket in