Don't abuse vfork()
authorнаб <nabijaczleweli@nabijaczleweli.xyz>
Sat, 8 May 2021 11:17:04 +0000 (13:17 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 21 May 2021 17:16:06 +0000 (10:16 -0700)
commit93ef500388db2bf8e85446a3df0b013609cdbd73
treed752ff227fcbe6228665ac1296e92a9299bc5261
parent5da6353987ccf73c67e9e1c68faa66989b76a583
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 <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #12015
lib/libzfs/libzfs_util.c
tests/zfs-tests/cmd/xattrtest/xattrtest.c