invalidate dh->priv_key after freeing it in error path; avoids
authordjm <djm@openbsd.org>
Sat, 4 Aug 2018 00:55:06 +0000 (00:55 +0000)
committerdjm <djm@openbsd.org>
Sat, 4 Aug 2018 00:55:06 +0000 (00:55 +0000)
unlikely double-free later. Reported by Viktor Dukhovni via
https://github.com/openssh/openssh-portable/pull/96
feedback jsing@ tb@

usr.bin/ssh/dh.c

index 9ebde8f..4b55d18 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: dh.c,v 1.65 2018/06/26 11:23:59 millert Exp $ */
+/* $OpenBSD: dh.c,v 1.66 2018/08/04 00:55:06 djm Exp $ */
 /*
  * Copyright (c) 2000 Niels Provos.  All rights reserved.
  *
@@ -275,6 +275,7 @@ dh_gen_key(DH *dh, int need)
        if (DH_generate_key(dh) == 0 ||
            !dh_pub_is_valid(dh, dh->pub_key)) {
                BN_clear_free(dh->priv_key);
+               dh->priv_key = NULL;
                return SSH_ERR_LIBCRYPTO_ERROR;
        }
        return 0;