Sync OpenBSD patchset 300:

Don't call tty_free unless the client is a terminal, otherwise tty_init hasn't
been called and it may end up doing close(0). From Kalle Olavi Niemitalo.
pull/1/head
Tiago Cunha 2009-08-31 22:24:18 +00:00
parent d15e88cb68
commit 86fb9737dc
1 changed files with 7 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $Id: server.c,v 1.175 2009-08-24 16:27:03 tcunha Exp $ */
/* $Id: server.c,v 1.176 2009-08-31 22:24:18 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -918,7 +918,12 @@ server_lost_client(struct client *c)
}
log_debug("lost client %d", c->ibuf.fd);
tty_free(&c->tty);
/*
* If CLIENT_TERMINAL hasn't been set, then tty_init hasn't been called
* and tty_free might close an unrelated fd.
*/
if (c->flags & CLIENT_TERMINAL)
tty_free(&c->tty);
screen_free(&c->status);