Re: um: TTY fixes (?)
From: Richard Weinberger
Date: Mon Jun 04 2012 - 19:14:43 EST
Am 04.06.2012 23:17, schrieb Alan Cox:
>> On all other ttys login works but bash dies because of of -EIO.
>> After vhangup() the tty returns -EIO upon read()/write().
>
> You can't re-open the tty because a process is holding on to it, not
> closing it and not killable. Fedora shouldn't be holding these devices
> open this way. The behaviour we have of refusing to reopen them why this
> is the case is both a) what the spec seems to say b) good security.
Hmm, there seems to be a bug in util-linux's login.
login-utils/login.c::init_tty() does:
...
/* Kill processes left on this tty */
tcsetattr(0, TCSAFLUSH, &ttt);
signal(SIGHUP, SIG_IGN); /* so vhangup() wont kill us */
vhangup();
signal(SIGHUP, SIG_DFL);
/* open stdin,stdout,stderr to the tty */
open_tty(cxt->tty_path);
/* restore tty modes */
tcsetattr(0, TCSAFLUSH, &tt);
...
By calling vhangup() it kills all other programs on the current tty.
open_tty() opens the tty again but it's still open because stdin, stdout and stderr
belongs to it.
If I add:
fclose(stdin);
fclose(stdout);
fclose(stderr);
before the call to vhangup() login works like charm. :-)
Karel, what do you think?
Thanks,
//richard
Attachment:
signature.asc
Description: OpenPGP digital signature