summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkus@openbsd.org <markus@openbsd.org>2016-09-06 09:22:56 +0000
committerDarren Tucker <dtucker@zip.com.au>2016-09-12 13:39:30 +1000
commit06ce56b05def9460aecc7cdb40e861a346214793 (patch)
tree15ab3514db58053c6ee5853532f84ccbd200f2d8
parente5e8d9114ac6837a038f4952994ca95a97fafe8d (diff)
upstream commit
ssh_set_newkeys: print correct block counters on rekeying; ok djm@ Upstream-ID: 32bb7a9cb9919ff5bab28d50ecef3a2b2045dd1e
-rw-r--r--packet.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/packet.c b/packet.c
index d4221d12..9ee23147 100644
--- a/packet.c
+++ b/packet.c
@@ -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;