From: markus@openbsd.org Date: Fri, 6 Mar 2020 18:21:28 +0000 (+0000) Subject: upstream: passphrase depends on kdfname, not ciphername (possible X-Git-Tag: V_8_3_P1~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=05efe270df1e925db0af56a806d18b5063db4b6d;p=thirdparty%2Fopenssh-portable.git upstream: passphrase depends on kdfname, not ciphername (possible null-deref); ok djm OpenBSD-Commit-ID: 0d39668edf5e790b5837df4926ee1141cec5471c --- diff --git a/sshkey.c b/sshkey.c index 63e568a04..de57c2ad4 100644 --- a/sshkey.c +++ b/sshkey.c @@ -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;