use direct syscall rather than write function in posix_spawn child
authorRich Felker <dalias@aerifal.cx>
Sat, 6 Dec 2014 02:19:39 +0000 (21:19 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 6 Dec 2014 02:19:39 +0000 (21:19 -0500)
the write function is a cancellation point and accesses thread-local
state belonging to the calling thread in the parent process. since
cancellation is blocked for the duration of posix_spawn, this is
probably safe, but it's fragile and unnecessary. making the syscall
directly is just as easy and clearly safe.

src/process/posix_spawn.c

index af1273170a034aa9781ebb277d6f6c1f27f8f9ea..0bdf71cd8d0437960ea0d7f31a80d0dd151bc651 100644 (file)
@@ -136,7 +136,7 @@ static int child(void *args_vp)
 fail:
        /* Since sizeof errno < PIPE_BUF, the write is atomic. */
        ret = -ret;
-       if (ret) while (write(p, &ret, sizeof ret) < 0);
+       if (ret) while (__syscall(SYS_write, p, &ret, sizeof ret) < 0);
        _exit(127);
 }