upstream: passphrase depends on kdfname, not ciphername (possible

null-deref); ok djm

OpenBSD-Commit-ID: 0d39668edf5e790b5837df4926ee1141cec5471c
This commit is contained in:
markus@openbsd.org 2020-03-06 18:21:28 +00:00 committed by Damien Miller
parent 1ddf5682f3
commit 05efe270df
1 changed files with 8 additions and 8 deletions

View File

@ -1,4 +1,4 @@
/* $OpenBSD: sshkey.c,v 1.100 2020/02/26 13:40:09 jsg Exp $ */
/* $OpenBSD: sshkey.c,v 1.101 2020/03/06 18:21:28 markus Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
* Copyright (c) 2008 Alexander von Gernler. All rights reserved.
@ -4147,20 +4147,20 @@ sshkey_parse_private2(struct sshbuf *blob, int type, const char *passphrase,
r = SSH_ERR_KEY_UNKNOWN_CIPHER;
goto out;
}
if ((passphrase == NULL || strlen(passphrase) == 0) &&
strcmp(ciphername, "none") != 0) {
/* passphrase required */
r = SSH_ERR_KEY_WRONG_PASSPHRASE;
goto out;
}
if (strcmp(kdfname, "none") != 0 && strcmp(kdfname, "bcrypt") != 0) {
r = SSH_ERR_KEY_UNKNOWN_CIPHER;
goto out;
}
if (!strcmp(kdfname, "none") && strcmp(ciphername, "none") != 0) {
if (strcmp(kdfname, "none") == 0 && strcmp(ciphername, "none") != 0) {
r = SSH_ERR_INVALID_FORMAT;
goto out;
}
if ((passphrase == NULL || strlen(passphrase) == 0) &&
strcmp(kdfname, "none") != 0) {
/* passphrase required */
r = SSH_ERR_KEY_WRONG_PASSPHRASE;
goto out;
}
if (nkeys != 1) {
/* XXX only one key supported */
r = SSH_ERR_INVALID_FORMAT;