chiark / gitweb /
process-util: add new FORK_NEW_MOUNTNS flag to safe_fork()
authorLennart Poettering <lennart@poettering.net>
Fri, 29 Dec 2017 17:52:20 +0000 (18:52 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 30 May 2018 05:49:52 +0000 (07:49 +0200)
That way we can move one more code location to use safe_fork()

src/basic/process-util.c
src/basic/process-util.h

index c60ca7516c2aad42697aee6fb254d0e9f0131f99..b468429a8ccd1d655d8b436b8aceb9087490f8ee 100644 (file)
@@ -1213,7 +1213,10 @@ int safe_fork_full(
                 if (sigprocmask(SIG_SETMASK, &ss, &saved_ss) < 0)
                         return log_full_errno(prio, errno, "Failed to set signal mask: %m");
 
-        pid = fork();
+        if (flags & FORK_NEW_MOUNTNS)
+                pid = raw_clone(SIGCHLD|CLONE_NEWNS);
+        else
+                pid = fork();
         if (pid < 0) {
                 r = -errno;
 
index f52f95ac1dad59e2659f5d48130a6a9e13b23c3a..652e4c34163e0b25348a20012990a849e022585d 100644 (file)
@@ -182,6 +182,7 @@ typedef enum ForkFlags {
         FORK_REOPEN_LOG    = 1U << 4,
         FORK_LOG           = 1U << 5,
         FORK_WAIT          = 1U << 6,
+        FORK_NEW_MOUNTNS   = 1U << 7,
 } ForkFlags;
 
 int safe_fork_full(const char *name, const int except_fds[], size_t n_except_fds, ForkFlags flags, pid_t *ret_pid);