2015-03-20 13:56:04 +00:00
|
|
|
diff -up openssh-6.8p1/compat.c.cisco-dh openssh-6.8p1/compat.c
|
|
|
|
--- openssh-6.8p1/compat.c.cisco-dh 2015-03-17 06:49:20.000000000 +0100
|
|
|
|
+++ openssh-6.8p1/compat.c 2015-03-19 12:57:58.862606969 +0100
|
2014-12-01 15:48:15 +00:00
|
|
|
@@ -167,6 +167,7 @@ compat_datafellows(const char *version)
|
|
|
|
SSH_BUG_SCANNER },
|
|
|
|
{ "Probe-*",
|
|
|
|
SSH_BUG_PROBE },
|
|
|
|
+ { "Cisco-*", SSH_BUG_MAX4096DH },
|
|
|
|
{ NULL, 0 }
|
|
|
|
};
|
|
|
|
|
2015-03-20 13:56:04 +00:00
|
|
|
diff -up openssh-6.8p1/compat.h.cisco-dh openssh-6.8p1/compat.h
|
|
|
|
--- openssh-6.8p1/compat.h.cisco-dh 2015-03-17 06:49:20.000000000 +0100
|
|
|
|
+++ openssh-6.8p1/compat.h 2015-03-19 12:57:58.862606969 +0100
|
2014-12-01 15:48:15 +00:00
|
|
|
@@ -60,6 +60,7 @@
|
|
|
|
#define SSH_NEW_OPENSSH 0x04000000
|
|
|
|
#define SSH_BUG_DYNAMIC_RPORT 0x08000000
|
|
|
|
#define SSH_BUG_CURVE25519PAD 0x10000000
|
|
|
|
+#define SSH_BUG_MAX4096DH 0x20000000
|
|
|
|
|
|
|
|
void enable_compat13(void);
|
|
|
|
void enable_compat20(void);
|
2015-03-20 13:56:04 +00:00
|
|
|
diff -up openssh-6.8p1/kexgexc.c.cisco-dh openssh-6.8p1/kexgexc.c
|
|
|
|
--- openssh-6.8p1/kexgexc.c.cisco-dh 2015-03-19 12:57:58.862606969 +0100
|
|
|
|
+++ openssh-6.8p1/kexgexc.c 2015-03-19 13:11:52.320519969 +0100
|
|
|
|
@@ -64,8 +64,27 @@ kexgex_client(struct ssh *ssh)
|
2014-12-01 15:48:15 +00:00
|
|
|
|
2015-03-20 13:56:04 +00:00
|
|
|
kex->min = DH_GRP_MIN;
|
|
|
|
kex->max = DH_GRP_MAX;
|
2014-12-01 15:48:15 +00:00
|
|
|
+
|
|
|
|
+ /* Servers with MAX4096DH need a preferred size (nbits) <= 4096.
|
|
|
|
+ * We need to also ensure that min < nbits < max */
|
|
|
|
+
|
|
|
|
+ if (datafellows & SSH_BUG_MAX4096DH) {
|
|
|
|
+ /* The largest min for these servers is 4096 */
|
2015-03-20 13:56:04 +00:00
|
|
|
+ kex->min = MIN(kex->min, 4096);
|
2014-12-01 15:48:15 +00:00
|
|
|
+ }
|
|
|
|
+
|
2015-03-20 13:56:04 +00:00
|
|
|
kex->nbits = nbits;
|
|
|
|
- if (ssh->compat & SSH_OLD_DHGEX) {
|
|
|
|
+ kex->nbits = MIN(nbits, kex->max);
|
|
|
|
+ kex->nbits = MAX(nbits, kex->min);
|
2014-12-01 15:48:15 +00:00
|
|
|
+
|
2015-03-20 13:56:04 +00:00
|
|
|
+ if (ssh->compat & SSH_BUG_MAX4096DH) {
|
2014-12-01 15:48:15 +00:00
|
|
|
+ /* Cannot have a nbits > 4096 for these servers */
|
2015-03-20 13:56:04 +00:00
|
|
|
+ kex->nbits = MIN(kex->nbits, 4096);
|
2014-12-01 15:48:15 +00:00
|
|
|
+ /* nbits has to be powers of two */
|
2015-03-20 13:56:04 +00:00
|
|
|
+ if (kex->nbits == 3072)
|
|
|
|
+ kex->nbits = 4096;
|
2014-12-01 15:48:15 +00:00
|
|
|
+ }
|
2015-03-20 13:56:04 +00:00
|
|
|
+ if (ssh->compat & SSH_OLD_DHGEX) { /* Old GEX request */
|
2014-12-01 15:48:15 +00:00
|
|
|
/* Old GEX request */
|
2015-03-20 13:56:04 +00:00
|
|
|
if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_DH_GEX_REQUEST_OLD))
|
|
|
|
!= 0 ||
|