aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2012-10-05 14:56:56 +0200
committerAndreas Schneider <asn@cryptomilk.org>2012-11-14 17:11:03 +0100
commit455da60846d68c508f7fed5b381097b364647425 (patch)
treee8673bba7447eb15c9bf518af21de4ada4f7f1c7
parent46b2eb3c147a29478809f1ab95e924e1bb7e3768 (diff)
downloadlibssh-455da60846d68c508f7fed5b381097b364647425.tar.gz
libssh-455da60846d68c508f7fed5b381097b364647425.tar.xz
libssh-455da60846d68c508f7fed5b381097b364647425.zip
CVE-2012-4561: Fix error handling of try_publickey_from_file().
-rw-r--r--src/keyfiles.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/keyfiles.c b/src/keyfiles.c
index b7c24253..5c33581d 100644
--- a/src/keyfiles.c
+++ b/src/keyfiles.c
@@ -1214,7 +1214,7 @@ ssh_string try_publickey_from_file(ssh_session session, struct ssh_keys_struct k
const char *priv;
const char *pub;
char *new;
- ssh_string pubkey=NULL;
+ ssh_string pubkey;
pub = keytab.publickey;
if (pub == NULL) {
@@ -1234,13 +1234,13 @@ ssh_string try_publickey_from_file(ssh_session session, struct ssh_keys_struct k
ssh_log(session, SSH_LOG_PACKET, "Trying to open publickey %s", pub);
if (!ssh_file_readaccess_ok(pub)) {
ssh_log(session, SSH_LOG_PACKET, "Failed to open publickey %s", pub);
- goto error;
+ return NULL;
}
ssh_log(session, SSH_LOG_PACKET, "Trying to open privatekey %s", priv);
if (!ssh_file_readaccess_ok(priv)) {
ssh_log(session, SSH_LOG_PACKET, "Failed to open privatekey %s", priv);
- goto error;
+ return NULL;
}
ssh_log(session, SSH_LOG_PACKET, "Success opening public and private key");
@@ -1255,18 +1255,18 @@ ssh_string try_publickey_from_file(ssh_session session, struct ssh_keys_struct k
"Wasn't able to open public key file %s: %s",
pub,
ssh_get_error(session));
- goto error;
+ return NULL;
}
new = realloc(*privkeyfile, strlen(priv) + 1);
if (new == NULL) {
ssh_string_free(pubkey);
- goto error;
+ return NULL;
}
strcpy(new, priv);
*privkeyfile = new;
-error:
+
return pubkey;
}