* process.c (allocate_pty) [PTY_OPEN]: Set fd's FD_CLOEXEC flag.

We can't portably rely on PTY_OPEN doing that, even if
it calls posix_openpt with O_CLOEXEC.
This commit is contained in:
Paul Eggert 2013-08-20 22:39:51 -07:00
parent 6e50e9836a
commit 0d7c1e66ff
2 changed files with 15 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2013-08-21 Paul Eggert <eggert@cs.ucla.edu>
* process.c (allocate_pty) [PTY_OPEN]: Set fd's FD_CLOEXEC flag.
We can't portably rely on PTY_OPEN doing that, even if
it calls posix_openpt with O_CLOEXEC.
2013-08-20 Kenichi Handa <handa@gnu.org>
* character.c (string_char): Improve commentary.

View file

@ -687,6 +687,15 @@ allocate_pty (char pty_name[PTY_NAME_SIZE])
if (fd >= 0)
{
#ifdef PTY_OPEN
/* Set FD's close-on-exec flag. This is needed even if
PT_OPEN calls posix_openpt with O_CLOEXEC, since POSIX
doesn't require support for that combination.
Multithreaded platforms where posix_openpt ignores
O_CLOEXEC (or where PTY_OPEN doesn't call posix_openpt)
have a race condition between the PTY_OPEN and here. */
fcntl (fd, F_SETFD, FD_CLOEXEC);
#endif
/* check to make certain that both sides are available
this avoids a nasty yet stupid bug in rlogins */
#ifdef PTY_TTY_NAME_SPRINTF