During porting I found a couple of things in the source, like slightly wrong types (int vs. LogLevel), a leaking field and calls c-library functions where x-functions exist (xrecallocarray, xasprintf).
Also includes for xmss which I think should be wrapped in #ifdef. The patch is attached. Markus
diff --git a/authfile.c b/authfile.c index b1c92f4..d020ff4 100644 --- a/authfile.c +++ b/authfile.c @@ -38,6 +38,7 @@ #include <unistd.h> #include <limits.h> +#include "xmalloc.h" #include "cipher.h" #include "ssh.h" #include "log.h" @@ -364,7 +365,7 @@ sshkey_load_cert(const char *filename, struct sshkey **keyp) if (keyp != NULL) *keyp = NULL; - if (asprintf(&file, "%s-cert.pub", filename) == -1) + if (xasprintf(&file, "%s-cert.pub", filename) == -1) return SSH_ERR_ALLOC_FAIL; if ((pub = sshkey_new(KEY_UNSPEC)) == NULL) { diff --git a/clientloop.c b/clientloop.c index 086c0df..a3422cb 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1881,7 +1881,7 @@ static void update_known_hosts(struct hostkeys_update_ctx *ctx) { int r, was_raw = 0; - int loglevel = options.update_hostkeys == SSH_UPDATE_HOSTKEYS_ASK ? + LogLevel loglevel = options.update_hostkeys == SSH_UPDATE_HOSTKEYS_ASK ? SYSLOG_LEVEL_INFO : SYSLOG_LEVEL_VERBOSE; char *fp, *response; size_t i; diff --git a/hostfile.c b/hostfile.c index e1f826b..f1d6810 100644 --- a/hostfile.c +++ b/hostfile.c @@ -251,7 +251,7 @@ record_hostkey(struct hostkey_foreach_line *l, void *_ctx) l->marker == MRK_NONE ? "" : (l->marker == MRK_CA ? "ca " : "revoked "), sshkey_type(l->key), l->path, l->linenum); - if ((tmp = recallocarray(hostkeys->entries, hostkeys->num_entries, + if ((tmp = xrecallocarray(hostkeys->entries, hostkeys->num_entries, hostkeys->num_entries + 1, sizeof(*hostkeys->entries))) == NULL) return SSH_ERR_ALLOC_FAIL; hostkeys->entries = tmp; diff --git a/misc.c b/misc.c index 009e02b..d655044 100644 --- a/misc.c +++ b/misc.c @@ -550,7 +550,7 @@ put_host_port(const char *host, u_short port) if (port == 0 || port == SSH_DEFAULT_PORT) return(xstrdup(host)); - if (asprintf(&hoststr, "[%s]:%d", host, (int)port) < 0) + if (xasprintf(&hoststr, "[%s]:%d", host, (int)port) < 0) fatal("put_host_port: asprintf: %s", strerror(errno)); debug3("put_host_port: %s", hoststr); return hoststr; diff --git a/ssh.c b/ssh.c index 91e7c35..9fe6bd1 100644 --- a/ssh.c +++ b/ssh.c @@ -236,7 +236,8 @@ resolve_host(const char *name, int port, int logerr, char *cname, size_t clen) { char strport[NI_MAXSERV]; struct addrinfo hints, *res; - int gaierr, loglevel = SYSLOG_LEVEL_DEBUG1; + int gaierr; + LogLevel loglevel = SYSLOG_LEVEL_DEBUG1; if (port <= 0) port = default_ssh_port(); diff --git a/sshconnect.c b/sshconnect.c index fdcdcd8..92a0eab 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1292,6 +1292,7 @@ ssh_login(struct ssh *ssh, Sensitive *sensitive, const char *orighost, ssh_kex2(ssh, host, hostaddr, port); ssh_userauth2(ssh, local_user, server_user, host, sensitive); free(local_user); + free(host); } /* print all known host keys for a given host, but skip keys of given type */ diff --git a/sshkey.c b/sshkey.c index ad19577..3a412d8 100644 --- a/sshkey.c +++ b/sshkey.c @@ -47,6 +47,7 @@ #include <util.h> #endif /* HAVE_UTIL_H */ +#include "xmalloc.h" #include "ssh2.h" #include "ssherr.h" #include "misc.h" @@ -55,10 +56,12 @@ #include "digest.h" #define SSHKEY_INTERNAL #include "sshkey.h" -#include "sshkey-xmss.h" #include "match.h" +#ifdef WITH_XMSS +#include "sshkey-xmss.h" #include "xmss_fast.h" +#endif #include "openbsd-compat/openssl-compat.h" @@ -1925,7 +1928,7 @@ cert_parse(struct sshbuf *b, struct sshkey *key, struct sshbuf *certbuf) goto out; } oprincipals = key->cert->principals; - key->cert->principals = recallocarray(key->cert->principals, + key->cert->principals = xrecallocarray(key->cert->principals, key->cert->nprincipals, key->cert->nprincipals + 1, sizeof(*key->cert->principals)); if (key->cert->principals == NULL) {
_______________________________________________ openssh-unix-dev mailing list openssh-unix-dev@xxxxxxxxxxx https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev