]> granicus.if.org Git - sudo/commitdiff
use pipe2() with O_CLOEXEC instead of pipe() + fcntl() and FD_CLOEXEC
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 20 Apr 2017 21:10:57 +0000 (15:10 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 20 Apr 2017 21:10:57 +0000 (15:10 -0600)
src/exec_monitor.c
src/exec_nopty.c

index ace1073a25432de83aa4f9caa256772bd3361d7e..b006d767febf7166f0bd61588f627999fb9435e3 100644 (file)
@@ -566,7 +566,7 @@ exec_monitor(struct command_details *details, bool foreground, int backchannel)
     mon_pgrp = getpgrp();      /* save a copy of our process group */
 
     /* Start command and wait for it to stop or exit */
-    if (pipe(errpipe) == -1)
+    if (pipe2(errpipe, O_CLOEXEC) == -1)
        sudo_fatal(U_("unable to create pipe"));
     cmnd_pid = sudo_debug_fork();
     if (cmnd_pid == -1) {
@@ -579,7 +579,6 @@ exec_monitor(struct command_details *details, bool foreground, int backchannel)
        close(signal_pipe[0]);
        close(signal_pipe[1]);
        close(errpipe[0]);
-       (void)fcntl(errpipe[1], F_SETFD, FD_CLOEXEC);
        restore_signals();
 
        /* setup tty and exec command */
index 3380d1eef228e26179915b6f2b4e078f09071869..b88d4a57daa9515853e585d957cf86996d9b5909 100644 (file)
@@ -157,7 +157,7 @@ exec_nopty(struct command_details *details, struct command_status *cstat)
     /*
      * We use a pipe to get errno if execve(2) fails in the child.
      */
-    if (pipe(errpipe) == -1)
+    if (pipe2(errpipe, O_CLOEXEC) == -1)
        sudo_fatal(U_("unable to create pipe"));
 
     /*
@@ -244,7 +244,6 @@ exec_nopty(struct command_details *details, struct command_status *cstat)
        close(errpipe[0]);
        close(signal_pipe[0]);
        close(signal_pipe[1]);
-       (void)fcntl(errpipe[1], F_SETFD, FD_CLOEXEC);
        exec_cmnd(details, errpipe[1]);
        while (write(errpipe[1], &errno, sizeof(int)) == -1) {
            if (errno != EINTR)