diff options
author | markus@openbsd.org <markus@openbsd.org> | 2016-09-06 09:22:56 +0000 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2016-09-12 13:39:30 +1000 |
commit | 06ce56b05def9460aecc7cdb40e861a346214793 (patch) | |
tree | 15ab3514db58053c6ee5853532f84ccbd200f2d8 /packet.c | |
parent | e5e8d9114ac6837a038f4952994ca95a97fafe8d (diff) |
upstream commit
ssh_set_newkeys: print correct block counters on
rekeying; ok djm@
Upstream-ID: 32bb7a9cb9919ff5bab28d50ecef3a2b2045dd1e
Diffstat (limited to 'packet.c')
-rw-r--r-- | packet.c | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: packet.c,v 1.235 2016/08/03 05:41:57 djm Exp $ */ +/* $OpenBSD: packet.c,v 1.236 2016/09/06 09:22:56 markus Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -977,30 +977,31 @@ ssh_set_newkeys(struct ssh *ssh, int mode) struct sshmac *mac; struct sshcomp *comp; struct sshcipher_ctx **ccp; + struct packet_state *ps; u_int64_t *max_blocks; - const char *wmsg; + const char *wmsg, *dir; int r, crypt_type; debug2("set_newkeys: mode %d", mode); if (mode == MODE_OUT) { + dir = "output"; ccp = &state->send_context; crypt_type = CIPHER_ENCRYPT; - state->p_send.packets = state->p_send.blocks = 0; + ps = &state->p_send; max_blocks = &state->max_blocks_out; } else { + dir = "input"; ccp = &state->receive_context; crypt_type = CIPHER_DECRYPT; - state->p_read.packets = state->p_read.blocks = 0; + ps = &state->p_read; max_blocks = &state->max_blocks_in; } if (state->newkeys[mode] != NULL) { - debug("set_newkeys: rekeying, input %llu bytes %llu blocks, " - "output %llu bytes %llu blocks", - (unsigned long long)state->p_read.bytes, - (unsigned long long)state->p_read.blocks, - (unsigned long long)state->p_send.bytes, - (unsigned long long)state->p_send.blocks); + debug("%s: rekeying after %llu %s blocks" + " (%llu bytes total)", __func__, + (unsigned long long)ps->blocks, dir, + (unsigned long long)ps->bytes); cipher_free(*ccp); *ccp = NULL; enc = &state->newkeys[mode]->enc; @@ -1018,6 +1019,8 @@ ssh_set_newkeys(struct ssh *ssh, int mode) free(comp->name); free(state->newkeys[mode]); } + /* note that both bytes and the seqnr are not reset */ + ps->packets = ps->blocks = 0; /* move newkeys from kex to state */ if ((state->newkeys[mode] = ssh->kex->newkeys[mode]) == NULL) return SSH_ERR_INTERNAL_ERROR; |