diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2012-10-05 14:56:56 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2012-11-14 17:11:03 +0100 |
commit | 455da60846d68c508f7fed5b381097b364647425 (patch) | |
tree | e8673bba7447eb15c9bf518af21de4ada4f7f1c7 | |
parent | 46b2eb3c147a29478809f1ab95e924e1bb7e3768 (diff) | |
download | libssh-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.c | 12 |
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; } |