wordexp(): Avoid leaking the pipe file descriptors to a parallel fork/exec.
This uses the new pipe2() system call added on May 1 (r250159).
This commit is contained in:
parent
2b254c9308
commit
d4eb686387
@ -121,7 +121,7 @@ we_askshell(const char *words, wordexp_t *we, int flags)
|
|||||||
|
|
||||||
serrno = errno;
|
serrno = errno;
|
||||||
|
|
||||||
if (pipe(pdes) < 0)
|
if (pipe2(pdes, O_CLOEXEC) < 0)
|
||||||
return (WRDE_NOSPACE); /* XXX */
|
return (WRDE_NOSPACE); /* XXX */
|
||||||
(void)sigemptyset(&newsigblock);
|
(void)sigemptyset(&newsigblock);
|
||||||
(void)sigaddset(&newsigblock, SIGCHLD);
|
(void)sigaddset(&newsigblock, SIGCHLD);
|
||||||
@ -140,10 +140,10 @@ we_askshell(const char *words, wordexp_t *we, int flags)
|
|||||||
* builtin on `words'.
|
* builtin on `words'.
|
||||||
*/
|
*/
|
||||||
(void)_sigprocmask(SIG_SETMASK, &oldsigblock, NULL);
|
(void)_sigprocmask(SIG_SETMASK, &oldsigblock, NULL);
|
||||||
_close(pdes[0]);
|
if ((pdes[1] != STDOUT_FILENO ?
|
||||||
if (_dup2(pdes[1], STDOUT_FILENO) < 0)
|
_dup2(pdes[1], STDOUT_FILENO) :
|
||||||
|
_fcntl(pdes[1], F_SETFD, 0)) < 0)
|
||||||
_exit(1);
|
_exit(1);
|
||||||
_close(pdes[1]);
|
|
||||||
execl(_PATH_BSHELL, "sh", flags & WRDE_UNDEF ? "-u" : "+u",
|
execl(_PATH_BSHELL, "sh", flags & WRDE_UNDEF ? "-u" : "+u",
|
||||||
"-c", "eval \"$1\";eval \"wordexp $2\"", "",
|
"-c", "eval \"$1\";eval \"wordexp $2\"", "",
|
||||||
flags & WRDE_SHOWERR ? "" : "exec 2>/dev/null", words,
|
flags & WRDE_SHOWERR ? "" : "exec 2>/dev/null", words,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user