aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorнаб <[email protected]>2021-05-08 13:17:04 +0200
committerBrian Behlendorf <[email protected]>2021-05-21 10:16:06 -0700
commit93ef500388db2bf8e85446a3df0b013609cdbd73 (patch)
treed752ff227fcbe6228665ac1296e92a9299bc5261 /lib
parent5da6353987ccf73c67e9e1c68faa66989b76a583 (diff)
Don't abuse vfork()
According to POSIX.1, "vfork() has the same effect as fork(2), except that the behavior is undefined if the process created by vfork() either modifies any data other than a variable of type pid_t used to store the return value from vfork(), [...], or calls any other function before successfully calling _exit(2) or one of the exec(3) family of functions." These do all three, and work by pure chance (or maybe they don't, but we blisfully don't know). Either way: bad idea to call vfork() from C, unless you're the standard library, and POSIX.1-2008 removes it entirely Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Ahelenia Ziemiańska <[email protected]> Closes #12015
Diffstat (limited to 'lib')
-rw-r--r--lib/libzfs/libzfs_util.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/libzfs/libzfs_util.c b/lib/libzfs/libzfs_util.c
index 57498ca3c..6abf21ac3 100644
--- a/lib/libzfs/libzfs_util.c
+++ b/lib/libzfs/libzfs_util.c
@@ -891,7 +891,7 @@ libzfs_run_process_impl(const char *path, char *argv[], char *env[], int flags,
if (lines != NULL && pipe2(link, O_NONBLOCK | O_CLOEXEC) == -1)
return (-EPIPE);
- pid = vfork();
+ pid = fork();
if (pid == 0) {
/* Child process */
devnull_fd = open("/dev/null", O_WRONLY | O_CLOEXEC);