Messages in this thread | | | Date | Tue, 5 Jun 2012 12:15:32 +0100 | From | Alan Cox <> | Subject | Re: um: TTY fixes (?) |
| |
> open_tty() closes all the old file descriptors after tty open:
It needs to close them before. > > vhangup(); > ... > fd = open(tty, O_RDWR | O_NONBLOCK); > ... > > flags = fcntl(fd, F_GETFL); > flags &= ~O_NONBLOCK; > fcntl(fd, F_SETFL, flags); > > for (i = 0; i < fd; i++) > close(i); > for (i = 0; i < 3; i++) > if (fd != i) > dup2(fd, i); > if (fd >= 3) > close(fd); > > we use this for pretty long time (17+ years). > > > If I add: > > fclose(stdin); > > fclose(stdout); > > fclose(stderr); > > before the call to vhangup() login works like charm. :-) > > > > Karel, what do you think? > > It's probably no problem to close all the file descriptors before > vhangup(), but it would be nice to know why we need this change after > 20 years :-)
Because we want to actually fix the standards (and security) violation that means it has happened to work on the console for 20 years.
Actually I'd prefer a clever solution which can spot all the fds are the same process so we can keep compatibility but I've not found a sensible way to do that.
Alan
| |