|
Zbigniew Jędrzejewski-Szmek |
a94605 |
From 064e901cb34b1a3dddbbe98595a2731bb85c4424 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
From: Lennart Poettering <lennart@poettering.net>
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
Date: Wed, 29 May 2024 11:46:51 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
Subject: [PATCH 2/3] exec-util: use the stdio array of safe_fork_full() where
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
appropriate
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
src/shared/exec-util.c | 28 ++++++++++++++++++----------
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
1 file changed, 18 insertions(+), 10 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
diff --git a/src/shared/exec-util.c b/src/shared/exec-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
index 1c7b14d98d..dc0974572f 100644
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
--- a/src/shared/exec-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+++ b/src/shared/exec-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
@@ -36,27 +36,35 @@
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
/* Put this test here for a lack of better place */
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
assert_cc(EAGAIN == EWOULDBLOCK);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
-static int do_spawn(const char *path, char *argv[], int stdout_fd, pid_t *pid, bool set_systemd_exec_pid) {
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- pid_t _pid;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+static int do_spawn(
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ const char *path,
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ char *argv[],
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ int stdout_fd,
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ pid_t *ret_pid,
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ bool set_systemd_exec_pid) {
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
int r;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ assert(path);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ assert(ret_pid);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
if (null_or_empty_path(path) > 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
log_debug("%s is empty (a mask).", path);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- r = safe_fork("(direxec)", FORK_DEATHSIG_SIGTERM|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE, &_pid);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ pid_t pid;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ r = safe_fork_full(
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ "(direxec)",
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ (const int[]) { STDIN_FILENO, stdout_fd < 0 ? STDOUT_FILENO : stdout_fd, STDERR_FILENO },
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ /* except_fds= */ NULL, /* n_except_fds= */ 0,
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ FORK_DEATHSIG_SIGTERM|FORK_LOG|FORK_RLIMIT_NOFILE_SAFE|FORK_REARRANGE_STDIO,
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ &pid;;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
if (r == 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
char *_argv[2];
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- if (stdout_fd >= 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- r = rearrange_stdio(STDIN_FILENO, TAKE_FD(stdout_fd), STDERR_FILENO);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- _exit(EXIT_FAILURE);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
if (set_systemd_exec_pid) {
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
r = setenv_systemd_exec_pid(false);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
@@ -75,7 +83,7 @@ static int do_spawn(const char *path, char *argv[], int stdout_fd, pid_t *pid, b
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
_exit(EXIT_FAILURE);
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
- *pid = _pid;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
+ *ret_pid = pid;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
return 1;
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
--
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
2.45.0
|
|
Zbigniew Jędrzejewski-Szmek |
a94605 |
|