From: Bram Moolenaar Date: Wed, 2 Aug 2017 20:33:28 +0000 (+0200) Subject: patch 8.0.0842: using slave pty after closing it X-Git-Tag: v8.0.0842 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=223896d3e9d4d511fc38fd9ee27ba16318733df6;p=vim patch 8.0.0842: using slave pty after closing it Problem: Using slave pty after closing it. Solution: Do the ioctl() before dup'ing it. --- diff --git a/src/os_unix.c b/src/os_unix.c index fb2628c7e..7c4b3180e 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -5316,6 +5316,17 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options) if (use_null_for_in || use_null_for_out || use_null_for_err) null_fd = open("/dev/null", O_RDWR | O_EXTRA, 0); + if (pty_slave_fd >= 0) + { + /* push stream discipline modules */ + SetupSlavePTY(pty_slave_fd); +# ifdef TIOCSCTTY + /* Try to become controlling tty (probably doesn't work, + * unless run by root) */ + ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL); +# endif + } + /* set up stdin for the child */ close(0); if (use_null_for_in && null_fd >= 0) @@ -5362,24 +5373,13 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options) close(fd_err[1]); if (pty_master_fd >= 0) { - close(pty_master_fd); /* not used */ - close(pty_slave_fd); /* duped above */ + close(pty_master_fd); /* not used in the child */ + close(pty_slave_fd); /* was duped above */ } if (null_fd >= 0) close(null_fd); - if (pty_slave_fd >= 0) - { - /* push stream discipline modules */ - SetupSlavePTY(pty_slave_fd); -# ifdef TIOCSCTTY - /* Try to become controlling tty (probably doesn't work, - * unless run by root) */ - ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL); -# endif - } - /* See above for type of argv. */ execvp(argv[0], argv); diff --git a/src/version.c b/src/version.c index 19ad732cb..0ef1f452b 100644 --- a/src/version.c +++ b/src/version.c @@ -769,6 +769,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 842, /**/ 841, /**/