]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream commit
authormarkus@openbsd.org <markus@openbsd.org>
Tue, 6 Sep 2016 09:22:56 +0000 (09:22 +0000)
committerDarren Tucker <dtucker@zip.com.au>
Mon, 12 Sep 2016 03:39:30 +0000 (13:39 +1000)
ssh_set_newkeys: print correct block counters on
rekeying; ok djm@

Upstream-ID: 32bb7a9cb9919ff5bab28d50ecef3a2b2045dd1e

packet.c

index d4221d12a0361f5d8cdd1a62f21e816ea6b47faa..9ee23147ecda9a810ccde5cb5b2f6569b527126f 100644 (file)
--- 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;