From: Bobby Bingham Date: Sat, 11 Nov 2017 00:15:43 +0000 (-0600) Subject: prevent fork's errno from being clobbered by atfork handlers X-Git-Tag: v1.1.19~50 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=c21051e90cd27a0b26be0ac66950b7396a156ba1;p=oweals%2Fmusl.git prevent fork's errno from being clobbered by atfork handlers If the syscall fails, errno must be set correctly for the caller. There's no guarantee that the handlers registered with pthread_atfork won't clobber errno, so we need to ensure it gets set after they are called. --- diff --git a/src/process/fork.c b/src/process/fork.c index b96f0024..da074ae9 100644 --- a/src/process/fork.c +++ b/src/process/fork.c @@ -18,9 +18,9 @@ pid_t fork(void) __fork_handler(-1); __block_all_sigs(&set); #ifdef SYS_fork - ret = syscall(SYS_fork); + ret = __syscall(SYS_fork); #else - ret = syscall(SYS_clone, SIGCHLD, 0); + ret = __syscall(SYS_clone, SIGCHLD, 0); #endif if (!ret) { pthread_t self = __pthread_self(); @@ -31,5 +31,5 @@ pid_t fork(void) } __restore_sigs(&set); __fork_handler(!ret); - return ret; + return __syscall_ret(ret); }