From c21051e90cd27a0b26be0ac66950b7396a156ba1 Mon Sep 17 00:00:00 2001 From: Bobby Bingham Date: Fri, 10 Nov 2017 18:15:43 -0600 Subject: [PATCH] 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. --- src/process/fork.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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); } -- 2.25.1