From fbdacd72680f38ce10980ade5badb1fac21d8788 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Sun, 21 Mar 2021 21:21:57 +0300 Subject: [PATCH] homework: use FORK_CLOSE_ALL_FDS in a few more places And make sure to reopen the log appropriately. --- src/home/homework-luks.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c index 1d012c5d02b..07d5bcfdb61 100644 --- a/src/home/homework-luks.c +++ b/src/home/homework-luks.c @@ -199,12 +199,15 @@ static int run_fsck(const char *node, const char *fstype) { return 0; } - r = safe_fork("(fsck)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_STDOUT_TO_STDERR, &fsck_pid); + r = safe_fork("(fsck)", + FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_STDOUT_TO_STDERR|FORK_CLOSE_ALL_FDS, + &fsck_pid); if (r < 0) return r; if (r == 0) { /* Child */ execl("/sbin/fsck", "/sbin/fsck", "-aTl", node, NULL); + log_open(); log_error_errno(errno, "Failed to execute fsck: %m"); _exit(FSCK_OPERATIONAL_ERROR); } @@ -2351,12 +2354,15 @@ static int ext4_offline_resize_fs(HomeSetup *setup, uint64_t new_size, bool disc log_info("Temporary unmounting of file system completed."); /* resize2fs requires that the file system is force checked first, do so. */ - r = safe_fork("(e2fsck)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_STDOUT_TO_STDERR, &fsck_pid); + r = safe_fork("(e2fsck)", + FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_STDOUT_TO_STDERR|FORK_CLOSE_ALL_FDS, + &fsck_pid); if (r < 0) return r; if (r == 0) { /* Child */ execlp("e2fsck" ,"e2fsck", "-fp", setup->dm_node, NULL); + log_open(); log_error_errno(errno, "Failed to execute e2fsck: %m"); _exit(EXIT_FAILURE); } @@ -2380,12 +2386,15 @@ static int ext4_offline_resize_fs(HomeSetup *setup, uint64_t new_size, bool disc return log_oom(); /* Resize the thing */ - r = safe_fork("(e2resize)", FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_STDOUT_TO_STDERR, &resize_pid); + r = safe_fork("(e2resize)", + FORK_RESET_SIGNALS|FORK_RLIMIT_NOFILE_SAFE|FORK_DEATHSIG|FORK_LOG|FORK_WAIT|FORK_STDOUT_TO_STDERR|FORK_CLOSE_ALL_FDS, + &resize_pid); if (r < 0) return r; if (r == 0) { /* Child */ execlp("resize2fs" ,"resize2fs", setup->dm_node, size_str, NULL); + log_open(); log_error_errno(errno, "Failed to execute resize2fs: %m"); _exit(EXIT_FAILURE); } -- 2.47.3