| 1 | --- a/version.h 27 Feb 2014 23:01:54 -0000 1.82 |
| 2 | +++ b/version.h 20 Apr 2014 03:35:15 -0000 |
| 3 | @@ -1,6 +1,6 @@ |
| 4 | /* $OpenBSD: version.h,v 1.70 2014/02/27 22:57:40 djm Exp $ */ |
| 5 | |
| 6 | -#define SSH_VERSION "OpenSSH_6.6" |
| 7 | +#define SSH_VERSION "OpenSSH_6.6.1" |
| 8 | |
| 9 | #define SSH_PORTABLE "p1" |
| 10 | #define SSH_RELEASE SSH_VERSION SSH_PORTABLE |
| 11 | --- a/compat.c 31 Dec 2013 01:25:41 -0000 1.82 |
| 12 | +++ b/compat.c 20 Apr 2014 03:33:59 -0000 1.85 |
| 13 | @@ -95,6 +95,9 @@ compat_datafellows(const char *version) |
| 14 | { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF}, |
| 15 | { "OpenSSH_4*", 0 }, |
| 16 | { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT}, |
| 17 | + { "OpenSSH_6.6.1*", SSH_NEW_OPENSSH}, |
| 18 | + { "OpenSSH_6.5*," |
| 19 | + "OpenSSH_6.6*", SSH_NEW_OPENSSH|SSH_BUG_CURVE25519PAD}, |
| 20 | { "OpenSSH*", SSH_NEW_OPENSSH }, |
| 21 | { "*MindTerm*", 0 }, |
| 22 | { "2.1.0*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC| |
| 23 | @@ -251,7 +254,6 @@ compat_cipher_proposal(char *cipher_prop |
| 24 | return cipher_prop; |
| 25 | } |
| 26 | |
| 27 | - |
| 28 | char * |
| 29 | compat_pkalg_proposal(char *pkalg_prop) |
| 30 | { |
| 31 | @@ -263,5 +265,18 @@ compat_pkalg_proposal(char *pkalg_prop) |
| 32 | if (*pkalg_prop == '\0') |
| 33 | fatal("No supported PK algorithms found"); |
| 34 | return pkalg_prop; |
| 35 | +} |
| 36 | + |
| 37 | +char * |
| 38 | +compat_kex_proposal(char *kex_prop) |
| 39 | +{ |
| 40 | + if (!(datafellows & SSH_BUG_CURVE25519PAD)) |
| 41 | + return kex_prop; |
| 42 | + debug2("%s: original KEX proposal: %s", __func__, kex_prop); |
| 43 | + kex_prop = filter_proposal(kex_prop, "curve25519-sha256@libssh.org"); |
| 44 | + debug2("%s: compat KEX proposal: %s", __func__, kex_prop); |
| 45 | + if (*kex_prop == '\0') |
| 46 | + fatal("No supported key exchange algorithms found"); |
| 47 | + return kex_prop; |
| 48 | } |
| 49 | |
| 50 | --- a/compat.h 31 Dec 2013 01:25:41 -0000 1.42 |
| 51 | +++ b/compat.h 20 Apr 2014 03:25:31 -0000 1.43 |
| 52 | @@ -59,6 +59,7 @@ |
| 53 | #define SSH_BUG_RFWD_ADDR 0x02000000 |
| 54 | #define SSH_NEW_OPENSSH 0x04000000 |
| 55 | #define SSH_BUG_DYNAMIC_RPORT 0x08000000 |
| 56 | +#define SSH_BUG_CURVE25519PAD 0x10000000 |
| 57 | |
| 58 | void enable_compat13(void); |
| 59 | void enable_compat20(void); |
| 60 | @@ -66,6 +67,7 @@ void compat_datafellows(const char * |
| 61 | int proto_spec(const char *); |
| 62 | char *compat_cipher_proposal(char *); |
| 63 | char *compat_pkalg_proposal(char *); |
| 64 | +char *compat_kex_proposal(char *); |
| 65 | |
| 66 | extern int compat13; |
| 67 | extern int compat20; |
| 68 | --- a/sshd.c 26 Feb 2014 23:20:08 -0000 1.448 |
| 69 | +++ b/sshd.c 20 Apr 2014 03:28:41 -0000 1.453 |
| 70 | @@ -2462,6 +2438,9 @@ do_ssh2_kex(void) |
| 71 | if (options.kex_algorithms != NULL) |
| 72 | myproposal[PROPOSAL_KEX_ALGS] = options.kex_algorithms; |
| 73 | |
| 74 | + myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal( |
| 75 | + myproposal[PROPOSAL_KEX_ALGS]); |
| 76 | + |
| 77 | if (options.rekey_limit || options.rekey_interval) |
| 78 | packet_set_rekey_limits((u_int32_t)options.rekey_limit, |
| 79 | (time_t)options.rekey_interval); |
| 80 | --- a/sshconnect2.c 4 Feb 2014 00:20:16 -0000 1.197 |
| 81 | +++ b/sshconnect2.c 20 Apr 2014 03:25:31 -0000 1.199 |
| 82 | @@ -195,6 +196,8 @@ ssh_kex2(char *host, struct sockaddr *ho |
| 83 | } |
| 84 | if (options.kex_algorithms != NULL) |
| 85 | myproposal[PROPOSAL_KEX_ALGS] = options.kex_algorithms; |
| 86 | + myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal( |
| 87 | + myproposal[PROPOSAL_KEX_ALGS]); |
| 88 | |
| 89 | if (options.rekey_limit || options.rekey_interval) |
| 90 | packet_set_rekey_limits((u_int32_t)options.rekey_limit, |
| 91 | --- a/bufaux.c 4 Feb 2014 00:20:15 -0000 1.62 |
| 92 | +++ b/bufaux.c 20 Apr 2014 03:24:50 -0000 1.63 |
| 93 | @@ -1,4 +1,4 @@ |
| 94 | -/* $OpenBSD: bufaux.c,v 1.56 2014/02/02 03:44:31 djm Exp $ */ |
| 95 | +/* $OpenBSD: bufaux.c,v 1.57 2014/04/16 23:22:45 djm Exp $ */ |
| 96 | /* |
| 97 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
| 98 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
| 99 | @@ -372,6 +372,9 @@ buffer_put_bignum2_from_string(Buffer *b |
| 100 | |
| 101 | if (l > 8 * 1024) |
| 102 | fatal("%s: length %u too long", __func__, l); |
| 103 | + /* Skip leading zero bytes */ |
| 104 | + for (; l > 0 && *s == 0; l--, s++) |
| 105 | + ; |
| 106 | p = buf = xmalloc(l + 1); |
| 107 | /* |
| 108 | * If most significant bit is set then prepend a zero byte to |