Fix a trio of bugs in the local/remote window calculation for datagram
authordjm <djm@openbsd.org>
Thu, 5 Aug 2010 13:08:42 +0000 (13:08 +0000)
committerdjm <djm@openbsd.org>
Thu, 5 Aug 2010 13:08:42 +0000 (13:08 +0000)
commit797865f6a9ee898ea2a427ada41f057c6c77e5c4
treeeb3178f4b5daba8dc4b5d93d25e78ae490189489
parent3d1419ac14251c8720915eab32b22e86920ceb22
Fix a trio of bugs in the local/remote window calculation for datagram
data channels (i.e. TunnelForward):

Calculate local_consumed correctly in channel_handle_wfd() by measuring
the delta to buffer_len(c->output) from when we start to when we finish.
The proximal problem here is that the output_filter we use in portable
modified the length of the dequeued datagram (to futz with the headers
for !OpenBSD).

In channel_output_poll(), don't enqueue datagrams that won't fit in the
peer's advertised packet size (highly unlikely to ever occur) or which
won't fit in the peer's remaining window (more likely).

In channel_input_data(), account for the 4-byte string header in
datagram packets that we accept from the peer and enqueue in c->output.

report, analysis and testing 2/3 cases from wierbows AT us.ibm.com;
"looks good" markus@
usr.bin/ssh/channels.c