From: Andrew Cooper Date: Thu, 4 Jul 2024 12:20:25 +0000 (+0200) Subject: tools/xl: Open xldevd.log with O_CLOEXEC X-Git-Tag: RELEASE-4.17.5~23 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=8e522bfa4816a0b7dd40652bf620269ade6836f0;p=xen.git tools/xl: Open xldevd.log with O_CLOEXEC `xl devd` has been observed leaking /var/log/xldevd.log into children. Note this is specifically safe; dup2() leaves O_CLOEXEC disabled on newfd, so after setting up stdout/stderr, it's only the logfile fd which will close on exec(). Link: https://github.com/QubesOS/qubes-issues/issues/8292 Reported-by: Demi Marie Obenour Signed-off-by: Andrew Cooper Reviewed-by: Marek Marczykowski-Górecki Reviewed-by: Demi Marie Obenour Acked-by: Anthony PERARD master commit: ba52b3b624e4a1a976908552364eba924ca45430 master date: 2024-06-24 16:22:59 +0100 --- diff --git a/tools/xl/xl_utils.c b/tools/xl/xl_utils.c index 17489d1829..b0d23b2cdb 100644 --- a/tools/xl/xl_utils.c +++ b/tools/xl/xl_utils.c @@ -27,6 +27,10 @@ #include "xl.h" #include "xl_utils.h" +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif + void dolog(const char *file, int line, const char *func, const char *fmt, ...) { va_list ap; @@ -270,7 +274,7 @@ int do_daemonize(const char *name, const char *pidfile) exit(-1); } - CHK_SYSCALL(logfile = open(fullname, O_WRONLY|O_CREAT|O_APPEND, 0644)); + CHK_SYSCALL(logfile = open(fullname, O_WRONLY | O_CREAT | O_APPEND | O_CLOEXEC, 0644)); free(fullname); assert(logfile >= 3);