summaryrefslogtreecommitdiffstats
path: root/usr.bin/ssh/sshkey.c
diff options
context:
space:
mode:
authordjm <djm@openbsd.org>2014-11-18 01:02:25 +0000
committerdjm <djm@openbsd.org>2014-11-18 01:02:25 +0000
commit2cec05c0cb9d954a6b2d78afa2d97b8052663213 (patch)
tree603af8d21f8addafc44b8d0a34069637a2d2c311 /usr.bin/ssh/sshkey.c
parentpartial sync (diff)
downloadwireguard-openbsd-2cec05c0cb9d954a6b2d78afa2d97b8052663213.tar.xz
wireguard-openbsd-2cec05c0cb9d954a6b2d78afa2d97b8052663213.zip
fix NULL pointer dereference crash in key loading
found by Michal Zalewski's AFL fuzzer
Diffstat (limited to 'usr.bin/ssh/sshkey.c')
-rw-r--r--usr.bin/ssh/sshkey.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/usr.bin/ssh/sshkey.c b/usr.bin/ssh/sshkey.c
index 6e6e3dd350a..f0540db1f35 100644
--- a/usr.bin/ssh/sshkey.c
+++ b/usr.bin/ssh/sshkey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshkey.c,v 1.4 2014/10/08 21:45:48 djm Exp $ */
+/* $OpenBSD: sshkey.c,v 1.5 2014/11/18 01:02:25 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
* Copyright (c) 2008 Alexander von Gernler. All rights reserved.
@@ -1207,9 +1207,7 @@ sshkey_read(struct sshkey *ret, char **cpp)
cp = space+1;
if (*cp == '\0')
return SSH_ERR_INVALID_FORMAT;
- if (ret->type == KEY_UNSPEC) {
- ret->type = type;
- } else if (ret->type != type)
+ if (ret->type != KEY_UNSPEC && ret->type != type)
return SSH_ERR_KEY_TYPE_MISMATCH;
if ((blob = sshbuf_new()) == NULL)
return SSH_ERR_ALLOC_FAIL;
@@ -1236,7 +1234,7 @@ sshkey_read(struct sshkey *ret, char **cpp)
sshkey_free(k);
return SSH_ERR_EC_CURVE_MISMATCH;
}
-/*XXXX*/
+ ret->type = type;
if (sshkey_is_cert(ret)) {
if (!sshkey_is_cert(k)) {
sshkey_free(k);