[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] libxl: don't leak self pipes
commit 7fbebfa5406dadd82ba2e650282715dacf771133 Author: Jason Andryuk <jandryuk@xxxxxxxxx> AuthorDate: Wed Jun 1 09:18:49 2022 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Jun 1 09:18:49 2022 +0200 libxl: don't leak self pipes libxl is leaking self pipes to child processes. These can be seen when running with env var _LIBXL_DEBUG_EXEC_FDS=1: libxl: debug: libxl_aoutils.c:593:libxl__async_exec_start: forking to execute: /etc/xen/scripts/vif-bridge online [Detaching after fork from child process 5099] libxl: execing /etc/xen/scripts/vif-bridge: fd 4 is open to pipe:[46805] with flags 0 libxl: execing /etc/xen/scripts/vif-bridge: fd 13 is open to pipe:[46807] with flags 0 libxl: execing /etc/xen/scripts/vif-bridge: fd 14 is open to pipe:[46807] with flags 0 libxl: execing /etc/xen/scripts/vif-bridge: fd 19 is open to pipe:[48570] with flags 0 libxl: execing /etc/xen/scripts/vif-bridge: fd 20 is open to pipe:[48570] with flags 0 (fd 3 is also open, but the check only starts at 4 for some reason.) For xl, this is the poller created by libxl_ctx_alloc, the poller created by do_domain_create -> libxl__ao_create, and the self pipe for libxl__sigchld_needed. Set CLOEXEC on the FDs so they are not leaked into children. Signed-off-by: Jason Andryuk <jandryuk@xxxxxxxxx> Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> --- tools/libs/light/libxl_event.c | 3 +++ tools/libs/light/libxl_fork.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/tools/libs/light/libxl_event.c b/tools/libs/light/libxl_event.c index c8bcd13960..8d24613921 100644 --- a/tools/libs/light/libxl_event.c +++ b/tools/libs/light/libxl_event.c @@ -1800,6 +1800,9 @@ int libxl__poller_init(libxl__gc *gc, libxl__poller *p) rc = libxl__pipe_nonblock(CTX, p->wakeup_pipe); if (rc) goto out; + libxl_fd_set_cloexec(CTX, p->wakeup_pipe[0], 1); + libxl_fd_set_cloexec(CTX, p->wakeup_pipe[1], 1); + return 0; out: diff --git a/tools/libs/light/libxl_fork.c b/tools/libs/light/libxl_fork.c index 676a14bb28..b13659d231 100644 --- a/tools/libs/light/libxl_fork.c +++ b/tools/libs/light/libxl_fork.c @@ -387,6 +387,8 @@ int libxl__sigchld_needed(libxl__gc *gc) /* non-reentrant, idempotent */ if (CTX->sigchld_selfpipe[0] < 0) { rc = libxl__pipe_nonblock(CTX, CTX->sigchld_selfpipe); if (rc) goto out; + libxl_fd_set_cloexec(CTX, CTX->sigchld_selfpipe[0], 1); + libxl_fd_set_cloexec(CTX, CTX->sigchld_selfpipe[1], 1); } if (!libxl__ev_fd_isregistered(&CTX->sigchld_selfpipe_efd)) { rc = libxl__ev_fd_register(gc, &CTX->sigchld_selfpipe_efd, -- generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |