components/openssh/patches/99-sha2-regression.patch
author Jan Parcel <jan.parcel@oracle.com>
Tue, 25 Apr 2017 15:08:28 -0700
branchs11u3-sru
changeset 7946 165bf092aa9c
permissions -rw-r--r--
PSARC/2017/022 OpenSSH 7.4 25295722 upgrade OpenSSH to 7.4p1 25295787 problem in UTILITY/OPENSSH 25295804 problem in UTILITY/OPENSSH 25295822 problem in UTILITY/OPENSSH 25295840 problem in UTILITY/OPENSSH 25809379 Openssh 7.4p1 has 3 regressions, fixed in 7.5 25795760 openssh drops connection when GSSAPIAuthentication set to no
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7946
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     1
#
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     2
# Temporary patch for 7.4p1 regression fixed in 7.5
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     3
# From upstream
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     4
# Remove when upgrading 
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     5
#
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     6
# https://bugzilla.mindrot.org/show_bug.cgi?id=2680
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     7
# fix regression in 7.4 server-sig-algs,
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     8
# accidentally excluding SHA2 RSA signature methods.
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
     9
#
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    10
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    11
diff -rupN old/kex.c new/kex.c
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    12
--- old/kex.c	2017-03-28 19:08:53.584501767 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    13
+++ new/kex.c	2017-03-28 19:22:26.034204047 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    14
@@ -388,7 +388,7 @@ kex_send_ext_info(struct ssh *ssh)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    15
 	int r;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    16
 	char *algs;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    17
 
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    18
-	if ((algs = sshkey_alg_list(0, 1, ',')) == NULL)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    19
+	if ((algs = sshkey_alg_list(0, 1, 1, ',')) == NULL)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    20
 		return SSH_ERR_ALLOC_FAIL;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    21
 	if ((r = sshpkt_start(ssh, SSH2_MSG_EXT_INFO)) != 0 ||
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    22
 	    (r = sshpkt_put_u32(ssh, 1)) != 0 ||
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    23
diff -rupN old/ssh.c new/ssh.c
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    24
--- old/ssh.c	2017-03-28 19:08:53.587726975 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    25
+++ new/ssh.c	2017-03-28 19:25:10.561309338 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    26
@@ -697,11 +697,11 @@ main(int ac, char **av)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    27
 			else if (strcmp(optarg, "kex") == 0)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    28
 				cp = kex_alg_list('\n');
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    29
 			else if (strcmp(optarg, "key") == 0)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    30
-				cp = sshkey_alg_list(0, 0, '\n');
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    31
+				cp = sshkey_alg_list(0, 0, 0, '\n');
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    32
 			else if (strcmp(optarg, "key-cert") == 0)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    33
-				cp = sshkey_alg_list(1, 0, '\n');
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    34
+				cp = sshkey_alg_list(1, 0, 0, '\n');
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    35
 			else if (strcmp(optarg, "key-plain") == 0)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    36
-				cp = sshkey_alg_list(0, 1, '\n');
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    37
+				cp = sshkey_alg_list(0, 1, 0, '\n');
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    38
 			else if (strcmp(optarg, "protocol-version") == 0) {
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    39
 #ifdef WITH_SSH1
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    40
 				cp = xstrdup("1\n2");
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    41
diff -rupN old/sshkey.c new/sshkey.c
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    42
--- old/sshkey.c	2017-03-28 19:08:53.590992687 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    43
+++ new/sshkey.c	2017-03-28 19:32:28.309848396 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    44
@@ -235,14 +235,16 @@ sshkey_ecdsa_nid_from_name(const char *n
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    45
 }
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    46
 
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    47
 char *
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    48
-sshkey_alg_list(int certs_only, int plain_only, char sep)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    49
+sshkey_alg_list(int certs_only, int plain_only, int include_sigonly, char sep)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    50
 {
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    51
 	char *tmp, *ret = NULL;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    52
 	size_t nlen, rlen = 0;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    53
 	const struct keytype *kt;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    54
 
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    55
 	for (kt = keytypes; kt->type != -1; kt++) {
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    56
-		if (kt->name == NULL || kt->sigonly)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    57
+		if (kt->name == NULL)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    58
+			continue;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    59
+		if (!include_sigonly && kt->sigonly)
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    60
 			continue;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    61
 		if ((certs_only && !kt->cert) || (plain_only && kt->cert))
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    62
 			continue;
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    63
diff -rupN old/sshkey.h new/sshkey.h
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    64
--- old/sshkey.h	2017-03-28 19:08:53.594083865 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    65
+++ new/sshkey.h	2017-03-28 19:33:39.322046181 -0700
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    66
@@ -157,7 +157,7 @@ int		 sshkey_ec_validate_private(const E
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    67
 const char	*sshkey_ssh_name(const struct sshkey *);
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    68
 const char	*sshkey_ssh_name_plain(const struct sshkey *);
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    69
 int		 sshkey_names_valid2(const char *, int);
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    70
-char		*sshkey_alg_list(int, int, char);
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    71
+char		*sshkey_alg_list(int, int, int, char);
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    72
 
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    73
 int	 sshkey_from_blob(const u_char *, size_t, struct sshkey **);
165bf092aa9c PSARC/2017/022 OpenSSH 7.4
Jan Parcel <jan.parcel@oracle.com>
parents:
diff changeset
    74
 int	 sshkey_fromb(struct sshbuf *, struct sshkey **);