lkml.org 
[lkml]   [2012]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: um: TTY fixes (?)
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

[unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2012-06-05 01:41    [W:0.142 / U:0.388 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site