Merge pull request #3641 from 0xAX/unset-cloexec-for-stdfs
basic/fd-util: introduce stdio_unset_cloexec() function
This commit is contained in:
@@ -186,6 +186,12 @@ int fd_cloexec(int fd, bool cloexec) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void stdio_unset_cloexec(void) {
|
||||
fd_cloexec(STDIN_FILENO, false);
|
||||
fd_cloexec(STDOUT_FILENO, false);
|
||||
fd_cloexec(STDERR_FILENO, false);
|
||||
}
|
||||
|
||||
_pure_ static bool fd_in_set(int fd, const int fdset[], unsigned n_fdset) {
|
||||
unsigned i;
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DIR*, closedir);
|
||||
|
||||
int fd_nonblock(int fd, bool nonblock);
|
||||
int fd_cloexec(int fd, bool cloexec);
|
||||
void stdio_unset_cloexec(void);
|
||||
|
||||
int close_all_fds(const int except[], unsigned n_except);
|
||||
|
||||
|
||||
@@ -888,9 +888,7 @@ int make_stdio(int fd) {
|
||||
|
||||
/* Explicitly unset O_CLOEXEC, since if fd was < 3, then
|
||||
* dup2() was a NOP and the bit hence possibly set. */
|
||||
fd_cloexec(STDIN_FILENO, false);
|
||||
fd_cloexec(STDOUT_FILENO, false);
|
||||
fd_cloexec(STDERR_FILENO, false);
|
||||
stdio_unset_cloexec();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -125,9 +125,7 @@ int import_fork_tar_x(const char *path, pid_t *ret) {
|
||||
if (null_fd != STDOUT_FILENO)
|
||||
null_fd = safe_close(null_fd);
|
||||
|
||||
fd_cloexec(STDIN_FILENO, false);
|
||||
fd_cloexec(STDOUT_FILENO, false);
|
||||
fd_cloexec(STDERR_FILENO, false);
|
||||
stdio_unset_cloexec();
|
||||
|
||||
if (unshare(CLONE_NEWNET) < 0)
|
||||
log_error_errno(errno, "Failed to lock tar into network namespace, ignoring: %m");
|
||||
@@ -199,9 +197,7 @@ int import_fork_tar_c(const char *path, pid_t *ret) {
|
||||
if (null_fd != STDIN_FILENO)
|
||||
null_fd = safe_close(null_fd);
|
||||
|
||||
fd_cloexec(STDIN_FILENO, false);
|
||||
fd_cloexec(STDOUT_FILENO, false);
|
||||
fd_cloexec(STDERR_FILENO, false);
|
||||
stdio_unset_cloexec();
|
||||
|
||||
if (unshare(CLONE_NEWNET) < 0)
|
||||
log_error_errno(errno, "Failed to lock tar into network namespace, ignoring: %m");
|
||||
|
||||
@@ -448,9 +448,7 @@ static int transfer_start(Transfer *t) {
|
||||
safe_close(null_fd);
|
||||
}
|
||||
|
||||
fd_cloexec(STDIN_FILENO, false);
|
||||
fd_cloexec(STDOUT_FILENO, false);
|
||||
fd_cloexec(STDERR_FILENO, false);
|
||||
stdio_unset_cloexec();
|
||||
|
||||
setenv("SYSTEMD_LOG_TARGET", "console-prefixed", 1);
|
||||
setenv("NOTIFY_SOCKET", "/run/systemd/import/notify", 1);
|
||||
|
||||
@@ -506,9 +506,7 @@ int pull_verify(PullJob *main_job,
|
||||
cmd[k++] = "-";
|
||||
cmd[k++] = NULL;
|
||||
|
||||
fd_cloexec(STDIN_FILENO, false);
|
||||
fd_cloexec(STDOUT_FILENO, false);
|
||||
fd_cloexec(STDERR_FILENO, false);
|
||||
stdio_unset_cloexec();
|
||||
|
||||
execvp("gpg2", (char * const *) cmd);
|
||||
execvp("gpg", (char * const *) cmd);
|
||||
|
||||
Reference in New Issue
Block a user