diff --git a/channels.c b/channels.c index 028d5db20..d9e81b5fa 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.365 2017/05/31 08:58:52 deraadt Exp $ */ +/* $OpenBSD: channels.c,v 1.366 2017/08/30 03:59:08 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1996,8 +1996,8 @@ channel_garbage_collect(Channel *c) } static void -channel_handler(chan_fn *ftab[], fd_set *readset, fd_set *writeset, - time_t *unpause_secs) +channel_handler(struct ssh *ssh, chan_fn *ftab[], + fd_set *readset, fd_set *writeset, time_t *unpause_secs) { static int did_init = 0; u_int i, oalloc; @@ -2052,8 +2052,8 @@ channel_handler(chan_fn *ftab[], fd_set *readset, fd_set *writeset, * select bitmasks. */ void -channel_prepare_select(fd_set **readsetp, fd_set **writesetp, int *maxfdp, - u_int *nallocp, time_t *minwait_secs, int rekeying) +channel_prepare_select(struct ssh *ssh, fd_set **readsetp, fd_set **writesetp, + int *maxfdp, u_int *nallocp, time_t *minwait_secs) { u_int n, sz, nfdset; @@ -2075,8 +2075,8 @@ channel_prepare_select(fd_set **readsetp, fd_set **writesetp, int *maxfdp, memset(*readsetp, 0, sz); memset(*writesetp, 0, sz); - if (!rekeying) - channel_handler(channel_pre, *readsetp, *writesetp, + if (!ssh_packet_is_rekeying(ssh)) + channel_handler(ssh, channel_pre, *readsetp, *writesetp, minwait_secs); } @@ -2085,9 +2085,9 @@ channel_prepare_select(fd_set **readsetp, fd_set **writesetp, int *maxfdp, * events pending. */ void -channel_after_select(fd_set *readset, fd_set *writeset) +channel_after_select(struct ssh *ssh, fd_set *readset, fd_set *writeset) { - channel_handler(channel_post, readset, writeset, NULL); + channel_handler(ssh, channel_post, readset, writeset, NULL); } diff --git a/channels.h b/channels.h index 36e5363aa..5ecb4d7c0 100644 --- a/channels.h +++ b/channels.h @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.h,v 1.126 2017/05/30 14:23:52 markus Exp $ */ +/* $OpenBSD: channels.h,v 1.127 2017/08/30 03:59:08 djm Exp $ */ /* * Author: Tatu Ylonen @@ -249,9 +249,9 @@ int channel_input_status_confirm(int, u_int32_t, struct ssh *); /* file descriptor handling (read/write) */ -void channel_prepare_select(fd_set **, fd_set **, int *, u_int*, - time_t*, int); -void channel_after_select(fd_set *, fd_set *); +void channel_prepare_select(struct ssh *, fd_set **, fd_set **, int *, + u_int*, time_t*); +void channel_after_select(struct ssh *, fd_set *, fd_set *); void channel_output_poll(void); int channel_not_very_much_buffered_data(void); diff --git a/clientloop.c b/clientloop.c index 248c9541f..2934c4763 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.301 2017/07/14 03:18:21 dtucker Exp $ */ +/* $OpenBSD: clientloop.c,v 1.302 2017/08/30 03:59:08 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -506,8 +506,8 @@ client_wait_until_can_do_something(fd_set **readsetp, fd_set **writesetp, int ret; /* Add any selections by the channel mechanism. */ - channel_prepare_select(readsetp, writesetp, maxfdp, nallocp, - &minwait_secs, rekeying); + channel_prepare_select(active_state, readsetp, writesetp, maxfdp, + nallocp, &minwait_secs); /* channel_prepare_select could have closed the last channel */ if (session_closed && !channel_still_open() && @@ -1353,7 +1353,7 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id) /* Do channel operations unless rekeying in progress. */ if (!ssh_packet_is_rekeying(active_state)) - channel_after_select(readset, writeset); + channel_after_select(active_state, readset, writeset); /* Buffer input from the connection. */ client_process_net_input(readset); diff --git a/serverloop.c b/serverloop.c index 5cc3fc099..bc56709b1 100644 --- a/serverloop.c +++ b/serverloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: serverloop.c,v 1.195 2017/08/11 04:16:35 dtucker Exp $ */ +/* $OpenBSD: serverloop.c,v 1.196 2017/08/30 03:59:08 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -207,8 +207,8 @@ wait_until_can_do_something(int connection_in, int connection_out, static time_t last_client_time; /* Allocate and update select() masks for channel descriptors. */ - channel_prepare_select(readsetp, writesetp, maxfdp, nallocp, - &minwait_secs, 0); + channel_prepare_select(active_state, readsetp, writesetp, maxfdp, + nallocp, &minwait_secs); /* XXX need proper deadline system for rekey/client alive */ if (minwait_secs != 0) @@ -411,7 +411,7 @@ server_loop2(Authctxt *authctxt) collect_children(); if (!ssh_packet_is_rekeying(active_state)) - channel_after_select(readset, writeset); + channel_after_select(active_state, readset, writeset); if (process_input(readset, connection_in) < 0) break; process_output(writeset, connection_out);