summaryrefslogtreecommitdiff
path: root/kexgexs.c
diff options
context:
space:
mode:
authordtucker@openbsd.org <dtucker@openbsd.org>2016-06-08 02:13:01 +0000
committerDarren Tucker <dtucker@zip.com.au>2016-06-14 13:43:59 +1000
commit68777faf271efb2713960605c748f6c8a4b26d55 (patch)
tree2895764aee26c12fe8d2213807aca618df16aa70 /kexgexs.c
parenta86ec4d0737ac5879223e7cd9d68c448df46e169 (diff)
upstream commit
Back out rev 1.28 "Check min and max sizes sent by the client" change. It caused "key_verify failed for server_host_key" in clients that send a DH-GEX min value less that DH_GRP_MIN, eg old OpenSSH and PuTTY. ok djm@ Upstream-ID: 452979d3ca5c1e9dff063287ea0a5314dd091f65
Diffstat (limited to 'kexgexs.c')
-rw-r--r--kexgexs.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/kexgexs.c b/kexgexs.c
index f3c7de54b..f4400dcbe 100644
--- a/kexgexs.c
+++ b/kexgexs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgexs.c,v 1.28 2016/06/01 04:19:49 dtucker Exp $ */ 1/* $OpenBSD: kexgexs.c,v 1.29 2016/06/08 02:13:01 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * Copyright (c) 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -83,21 +83,21 @@ input_kex_dh_gex_request(int type, u_int32_t seq, void *ctxt)
83 kex->nbits = nbits; 83 kex->nbits = nbits;
84 kex->min = min; 84 kex->min = min;
85 kex->max = max; 85 kex->max = max;
86 min = MAX(DH_GRP_MIN, min);
87 max = MIN(DH_GRP_MAX, max);
88 nbits = MAX(DH_GRP_MIN, nbits);
89 nbits = MIN(DH_GRP_MAX, nbits);
90
86 if (kex->max < kex->min || kex->nbits < kex->min || 91 if (kex->max < kex->min || kex->nbits < kex->min ||
87 kex->max < kex->nbits || kex->max < DH_GRP_MIN || 92 kex->max < kex->nbits || kex->max < DH_GRP_MIN) {
88 kex->min > DH_GRP_MAX) {
89 r = SSH_ERR_DH_GEX_OUT_OF_RANGE; 93 r = SSH_ERR_DH_GEX_OUT_OF_RANGE;
90 goto out; 94 goto out;
91 } 95 }
92 kex->min = MAX(DH_GRP_MIN, kex->min);
93 kex->max = MIN(DH_GRP_MAX, kex->max);
94 kex->nbits = MAX(DH_GRP_MIN, kex->nbits);
95 kex->nbits = MIN(DH_GRP_MAX, kex->nbits);
96 96
97 /* Contact privileged parent */ 97 /* Contact privileged parent */
98 kex->dh = PRIVSEP(choose_dh(kex->min, kex->nbits, kex->max)); 98 kex->dh = PRIVSEP(choose_dh(min, nbits, max));
99 if (kex->dh == NULL) { 99 if (kex->dh == NULL) {
100 sshpkt_disconnect(ssh, "no matching DH group found"); 100 sshpkt_disconnect(ssh, "no matching DH grp found");
101 r = SSH_ERR_ALLOC_FAIL; 101 r = SSH_ERR_ALLOC_FAIL;
102 goto out; 102 goto out;
103 } 103 }