sshd gets stuck: select() in packet_read_seqnr waits indefinitely
Matt Day
opensshbugs at fjarlq.com
Thu Mar 15 12:12:09 EST 2007
On Thu, Mar 15, 2007 at 11:14:16AM +1100, Darren Tucker wrote:
> You could try the attached patch.
Oh, cool...thanks for the fast response!
I have a question about the patch. With it applied, packet_read_seqnr
now reads:
/* Wait for some data to arrive. */
while (select(connection_in + 1, setp, NULL, NULL,
packet_wait_tvp) == -1 &&
(errno == EAGAIN || errno == EINTR))
;
/* Read data from the socket. */
len = read(connection_in, buf, sizeof(buf));
...
On FreeBSD, select() will return 0 upon timeout, so packet_read_seqnr
would end up calling read() even though the descriptor isn't ready,
so I think it would block.
Similarly, I don't see how a select() timeout would cause packet_write_wait
to abort. Instead it would call packet_write_poll (which calls write())
even though the descriptor isn't ready for writing. Am I missing something?
Thanks,
Matt
More information about the openssh-unix-dev
mailing list