Mercurial > dropbear
diff common-session.c @ 452:4cab61369879
Prevent invalid packets being sent during key-exchange, instead queue
them until afterwards. This could sometimes terminate connections
after 8 hours if (for example) a new TCP forwarded connection
was sent at the KEX timeout.
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Fri, 27 Jul 2007 17:13:42 +0000 |
parents | 9c61e7af0156 |
children | 7e43f5e473b9 |
line wrap: on
line diff
--- a/common-session.c Wed Jul 25 16:20:57 2007 +0000 +++ b/common-session.c Fri Jul 27 17:13:42 2007 +0000 @@ -80,9 +80,12 @@ initqueue(&ses.writequeue); ses.requirenext = SSH_MSG_KEXINIT; - ses.dataallowed = 0; /* don't send data yet, we'll wait until after kex */ + ses.dataallowed = 1; /* we can send data until we actually + send the SSH_MSG_KEXINIT */ ses.ignorenext = 0; ses.lastpacket = 0; + ses.reply_queue_head = NULL; + ses.reply_queue_tail = NULL; /* set all the algos to none */ ses.keys = (struct key_context*)m_malloc(sizeof(struct key_context)); @@ -192,6 +195,10 @@ process_packet(); } } + + /* if required, flush out any queued reply packets that + were being held up during a KEX */ + maybe_flush_reply_queue(); /* process pipes etc for the channels, ses.dataallowed == 0 * during rekeying ) */