]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: change explicit_bzero();free() to freezero()
authorjsg@openbsd.org <jsg@openbsd.org>
Wed, 26 Feb 2020 13:40:09 +0000 (13:40 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 28 Feb 2020 01:26:28 +0000 (12:26 +1100)
While freezero() returns early if the pointer is NULL the tests for
NULL in callers are left to avoid warnings about passing an
uninitialised size argument across a function boundry.

ok deraadt@ djm@

OpenBSD-Commit-ID: 2660fa334fcc7cd05ec74dd99cb036f9ade6384a

23 files changed:
auth-options.c
auth2-chall.c
auth2-passwd.c
authfd.c
channels.c
cipher.c
clientloop.c
digest-libc.c
hmac.c
hostfile.c
kex.c
monitor.c
ssh-add.c
ssh-agent.c
ssh-dss.c
ssh-ed25519-sk.c
ssh-ed25519.c
ssh-keygen.c
ssh-xmss.c
sshbuf-misc.c
sshbuf.c
sshkey.c
umac.c

index 2d200944c17ae9668a2c75227246e504b679f5a0..b63782de7dd07b685aafb49132ecb0ca561b92eb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: auth-options.c,v 1.90 2019/11/25 00:54:23 djm Exp $ */
+/* $OpenBSD: auth-options.c,v 1.91 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2018 Damien Miller <djm@mindrot.org>
  *
@@ -222,8 +222,7 @@ sshauthopt_free(struct sshauthopt *opts)
                free(opts->permitlisten[i]);
        free(opts->permitlisten);
 
-       explicit_bzero(opts, sizeof(*opts));
-       free(opts);
+       freezero(opts, sizeof(*opts));
 }
 
 struct sshauthopt *
index c57387b71423ee864a869b8211e7a64e54096530..3acd0a837c9fd620c149fa5f6ffe5a820c9f006a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: auth2-chall.c,v 1.52 2019/11/13 04:47:52 deraadt Exp $ */
+/* $OpenBSD: auth2-chall.c,v 1.53 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2001 Markus Friedl.  All rights reserved.
  * Copyright (c) 2001 Per Allansson.  All rights reserved.
@@ -147,8 +147,7 @@ kbdint_free(KbdintAuthctxt *kbdintctxt)
        if (kbdintctxt->device)
                kbdint_reset_device(kbdintctxt);
        free(kbdintctxt->devices);
-       explicit_bzero(kbdintctxt, sizeof(*kbdintctxt));
-       free(kbdintctxt);
+       freezero(kbdintctxt, sizeof(*kbdintctxt));
 }
 /* get next device */
 static int
index 6601e8664c8d1aa218e8227a5a359e0e20181659..bb5f8192d7b5b05f9ddbfb8130ad3500424a9543 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: auth2-passwd.c,v 1.17 2019/09/06 04:53:27 djm Exp $ */
+/* $OpenBSD: auth2-passwd.c,v 1.18 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
  *
@@ -66,8 +66,7 @@ userauth_passwd(struct ssh *ssh)
                logit("password change not supported");
        else if (PRIVSEP(auth_password(ssh, password)) == 1)
                authenticated = 1;
-       explicit_bzero(password, len);
-       free(password);
+       freezero(password, len);
        return authenticated;
 }
 
index 05fd45401e1273a3d635bdef90d393a43e7738db..9831a12907fab7d0ed62dee0943f99a3b0321ca5 100644 (file)
--- a/authfd.c
+++ b/authfd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: authfd.c,v 1.121 2019/12/21 02:19:13 djm Exp $ */
+/* $OpenBSD: authfd.c,v 1.122 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -561,10 +561,8 @@ ssh_remove_identity(int sock, struct sshkey *key)
                goto out;
        r = decode_reply(type);
  out:
-       if (blob != NULL) {
-               explicit_bzero(blob, blen);
-               free(blob);
-       }
+       if (blob != NULL)
+               freezero(blob, blen);
        sshbuf_free(msg);
        return r;
 }
index 226ba7a39123ba533c65eac309ea0bcac8e27f2c..19c22c4efcddeecc88664fc267787085ff1cb1cb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.395 2020/01/25 06:40:20 djm Exp $ */
+/* $OpenBSD: channels.c,v 1.396 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -625,14 +625,12 @@ channel_free(struct ssh *ssh, Channel *c)
                if (cc->abandon_cb != NULL)
                        cc->abandon_cb(ssh, c, cc->ctx);
                TAILQ_REMOVE(&c->status_confirms, cc, entry);
-               explicit_bzero(cc, sizeof(*cc));
-               free(cc);
+               freezero(cc, sizeof(*cc));
        }
        if (c->filter_cleanup != NULL && c->filter_ctx != NULL)
                c->filter_cleanup(ssh, c->self, c->filter_ctx);
        sc->channels[c->self] = NULL;
-       explicit_bzero(c, sizeof(*c));
-       free(c);
+       freezero(c, sizeof(*c));
 }
 
 void
@@ -3295,8 +3293,7 @@ channel_input_status_confirm(int type, u_int32_t seq, struct ssh *ssh)
                return 0;
        cc->cb(ssh, type, c, cc->ctx);
        TAILQ_REMOVE(&c->status_confirms, cc, entry);
-       explicit_bzero(cc, sizeof(*cc));
-       free(cc);
+       freezero(cc, sizeof(*cc));
        return 0;
 }
 
index 820bc6ace3e8c80e79a8ac3f617ab74f9542b4d7..54d325ee2f663dfa87d42b36beb6b4b06051c4fd 100644 (file)
--- a/cipher.c
+++ b/cipher.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cipher.c,v 1.114 2020/01/23 10:24:29 dtucker Exp $ */
+/* $OpenBSD: cipher.c,v 1.115 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -328,8 +328,7 @@ cipher_init(struct sshcipher_ctx **ccp, const struct sshcipher *cipher,
 #ifdef WITH_OPENSSL
                        EVP_CIPHER_CTX_free(cc->evp);
 #endif /* WITH_OPENSSL */
-                       explicit_bzero(cc, sizeof(*cc));
-                       free(cc);
+                       freezero(cc, sizeof(*cc));
                }
        }
        return ret;
@@ -434,8 +433,7 @@ cipher_free(struct sshcipher_ctx *cc)
        EVP_CIPHER_CTX_free(cc->evp);
        cc->evp = NULL;
 #endif
-       explicit_bzero(cc, sizeof(*cc));
-       free(cc);
+       freezero(cc, sizeof(*cc));
 }
 
 /*
index 05fc92861efed082f7f6a9c565a83ce41d035f61..5bfccdd358d8bc4271159cdbe6ee9eb0bf5cfbfe 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: clientloop.c,v 1.341 2020/02/26 01:31:47 dtucker Exp $ */
+/* $OpenBSD: clientloop.c,v 1.342 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -473,8 +473,7 @@ client_global_request_reply(int type, u_int32_t seq, struct ssh *ssh)
                gc->cb(ssh, type, seq, gc->ctx);
        if (--gc->ref_count <= 0) {
                TAILQ_REMOVE(&global_confirms, gc, entry);
-               explicit_bzero(gc, sizeof(*gc));
-               free(gc);
+               freezero(gc, sizeof(*gc));
        }
 
        ssh_packet_set_alive_timeouts(ssh, 0);
index 12737e5d58f65570c58d9ffbe0be3ad6090e502b..86a1dbf291a83ddba710c34eed1e5930786d4009 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: digest-libc.c,v 1.6 2017/05/08 22:57:38 djm Exp $ */
+/* $OpenBSD: digest-libc.c,v 1.7 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2013 Damien Miller <djm@mindrot.org>
  * Copyright (c) 2014 Markus Friedl.  All rights reserved.
@@ -230,8 +230,7 @@ ssh_digest_free(struct ssh_digest_ctx *ctx)
                if (digest) {
                        explicit_bzero(ctx->mdctx, digest->ctx_len);
                        free(ctx->mdctx);
-                       explicit_bzero(ctx, sizeof(*ctx));
-                       free(ctx);
+                       freezero(ctx, sizeof(*ctx));
                }
        }
 }
diff --git a/hmac.c b/hmac.c
index 32688876d3526c162f1c56af54d97f7e7e9f7592..7b588019e74b07b594fa7da4b5d9683c4e78122c 100644 (file)
--- a/hmac.c
+++ b/hmac.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: hmac.c,v 1.13 2019/09/06 04:53:27 djm Exp $ */
+/* $OpenBSD: hmac.c,v 1.14 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2014 Markus Friedl.  All rights reserved.
  *
@@ -131,8 +131,7 @@ ssh_hmac_free(struct ssh_hmac_ctx *ctx)
                        explicit_bzero(ctx->buf, ctx->buf_len);
                        free(ctx->buf);
                }
-               explicit_bzero(ctx, sizeof(*ctx));
-               free(ctx);
+               freezero(ctx, sizeof(*ctx));
        }
 }
 
index 4a0349a60a396793c508150d46b199802b9ea383..7af47adf3161f9e059d3393e83fb73f5b34cf6e7 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: hostfile.c,v 1.77 2020/01/25 00:21:08 djm Exp $ */
+/* $OpenBSD: hostfile.c,v 1.78 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -298,8 +298,7 @@ free_hostkeys(struct hostkeys *hostkeys)
                explicit_bzero(hostkeys->entries + i, sizeof(*hostkeys->entries));
        }
        free(hostkeys->entries);
-       explicit_bzero(hostkeys, sizeof(*hostkeys));
-       free(hostkeys);
+       freezero(hostkeys, sizeof(*hostkeys));
 }
 
 static int
diff --git a/kex.c b/kex.c
index ce85f043958edad34e111f1e13e7b3def34dc204..899036e6e636e669f6fad4be113ccb5374a8e8f6 100644 (file)
--- a/kex.c
+++ b/kex.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kex.c,v 1.156 2020/01/23 10:24:29 dtucker Exp $ */
+/* $OpenBSD: kex.c,v 1.157 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2000, 2001 Markus Friedl.  All rights reserved.
  *
@@ -670,8 +670,7 @@ kex_free_newkeys(struct newkeys *newkeys)
        }
        free(newkeys->mac.name);
        explicit_bzero(&newkeys->mac, sizeof(newkeys->mac));
-       explicit_bzero(newkeys, sizeof(*newkeys));
-       free(newkeys);
+       freezero(newkeys, sizeof(*newkeys));
 }
 
 void
index 2ce89fe901cd20d6470f8c1bd49a6ebfef21074c..9a67d937b5be8362aaf085cb79b0a22b5e231b76 100644 (file)
--- a/monitor.c
+++ b/monitor.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: monitor.c,v 1.208 2020/02/06 22:30:54 naddy Exp $ */
+/* $OpenBSD: monitor.c,v 1.209 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright 2002 Niels Provos <provos@citi.umich.edu>
  * Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -893,8 +893,7 @@ mm_answer_authpassword(struct ssh *ssh, int sock, struct sshbuf *m)
        /* Only authenticate if the context is valid */
        authenticated = options.password_authentication &&
            auth_password(ssh, passwd);
-       explicit_bzero(passwd, plen);
-       free(passwd);
+       freezero(passwd, plen);
 
        sshbuf_reset(m);
        if ((r = sshbuf_put_u32(m, authenticated)) != 0)
index 18f4e12ddcefa29a4275880f51bab8e49fa15037..c7bb02cb0c5fb1713c5dbe72e4618676bacc9fb8 100644 (file)
--- a/ssh-add.c
+++ b/ssh-add.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-add.c,v 1.153 2020/02/18 08:58:33 dtucker Exp $ */
+/* $OpenBSD: ssh-add.c,v 1.154 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -105,8 +105,7 @@ static void
 clear_pass(void)
 {
        if (pass) {
-               explicit_bzero(pass, strlen(pass));
-               free(pass);
+               freezero(pass, strlen(pass));
                pass = NULL;
        }
 }
@@ -521,8 +520,7 @@ lock_agent(int agent_fd, int lock)
                        fprintf(stderr, "Passwords do not match.\n");
                        passok = 0;
                }
-               explicit_bzero(p2, strlen(p2));
-               free(p2);
+               freezero(p2, strlen(p2));
        }
        if (passok) {
                if ((r = ssh_lock_agent(agent_fd, lock, p1)) == 0) {
@@ -533,8 +531,7 @@ lock_agent(int agent_fd, int lock)
                            lock ? "" : "un", ssh_err(r));
                }
        }
-       explicit_bzero(p1, strlen(p1));
-       free(p1);
+       freezero(p1, strlen(p1));
        return (ret);
 }
 
index 7eb6f0dc52360b9e308c9b0cf9c6404ba042bc82..9e8366a7cd9d0da5cf8450cef6fc4695c05cfa1d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-agent.c,v 1.255 2020/02/06 22:30:54 naddy Exp $ */
+/* $OpenBSD: ssh-agent.c,v 1.256 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -620,8 +620,7 @@ process_lock_agent(SocketEntry *e, int lock)
                        fatal("bcrypt_pbkdf");
                success = 1;
        }
-       explicit_bzero(passwd, pwlen);
-       free(passwd);
+       freezero(passwd, pwlen);
        send_status(e, success);
 }
 
index a23c383dc805465a3dfa96722674ae10d36aa213..fddc29cc9173238d7a1e2c2e76632254f2557ec5 100644 (file)
--- a/ssh-dss.c
+++ b/ssh-dss.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-dss.c,v 1.37 2018/02/07 02:06:51 jsing Exp $ */
+/* $OpenBSD: ssh-dss.c,v 1.39 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
  *
@@ -200,10 +200,8 @@ ssh_dss_verify(const struct sshkey *key,
        BN_clear_free(sig_s);
        sshbuf_free(b);
        free(ktype);
-       if (sigblob != NULL) {
-               explicit_bzero(sigblob, len);
-               free(sigblob);
-       }
+       if (sigblob != NULL)
+               freezero(sigblob, len);
        return ret;
 }
 #endif /* WITH_OPENSSL */
index b6f28c09a22fe90b04104f0f5ba9f1484f88bacd..f784776d4aab0d68546997e57849c6104c1f94a4 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-ed25519-sk.c,v 1.4 2019/11/26 03:04:27 djm Exp $ */
+/* $OpenBSD: ssh-ed25519-sk.c,v 1.5 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2019 Markus Friedl.  All rights reserved.
  *
@@ -154,10 +154,8 @@ ssh_ed25519_sk_verify(const struct sshkey *key,
                details = NULL;
        }
  out:
-       if (m != NULL) {
-               explicit_bzero(m, smlen); /* NB mlen may be invalid if r != 0 */
-               free(m);
-       }
+       if (m != NULL)
+               freezero(m, smlen); /* NB mlen may be invalid if r != 0 */
        sshkey_sig_details_free(details);
        sshbuf_free(b);
        sshbuf_free(encoded);
index 5163e029728b85a9f33576b4c73dffb397c97c1e..7dee82707ffbc6184e4295a90f82984853a52d27 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-ed25519.c,v 1.7 2016/04/21 06:08:02 djm Exp $ */
+/* $OpenBSD: ssh-ed25519.c,v 1.8 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2013 Markus Friedl <markus@openbsd.org>
  *
@@ -83,10 +83,8 @@ ssh_ed25519_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
        r = 0;
  out:
        sshbuf_free(b);
-       if (sig != NULL) {
-               explicit_bzero(sig, slen);
-               free(sig);
-       }
+       if (sig != NULL) 
+               freezero(sig, slen);
 
        return r;
 }
@@ -153,14 +151,10 @@ ssh_ed25519_verify(const struct sshkey *key,
        /* success */
        r = 0;
  out:
-       if (sm != NULL) {
-               explicit_bzero(sm, smlen);
-               free(sm);
-       }
-       if (m != NULL) {
-               explicit_bzero(m, smlen); /* NB mlen may be invalid if r != 0 */
-               free(m);
-       }
+       if (sm != NULL) 
+               freezero(sm, smlen);
+       if (m != NULL) 
+               freezero(m, smlen); /* NB mlen may be invalid if r != 0 */
        sshbuf_free(b);
        free(ktype);
        return r;
index 0d6ed1fff2c55520872bd3c3d5119b15506ffe6e..d9c207b427725fe8f76fcd2af43ec474317cac9b 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keygen.c,v 1.398 2020/02/07 03:27:54 djm Exp $ */
+/* $OpenBSD: ssh-keygen.c,v 1.399 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -327,8 +327,7 @@ load_identity(const char *filename, char **commentp)
        else
                pass = read_passphrase("Enter passphrase: ", RP_ALLOW_STDIN);
        r = sshkey_load_private(filename, pass, &prv, commentp);
-       explicit_bzero(pass, strlen(pass));
-       free(pass);
+       freezero(pass, strlen(pass));
        if (r != 0)
                fatal("Load key \"%s\": %s", filename, ssh_err(r));
        return prv;
@@ -1424,8 +1423,7 @@ do_change_passphrase(struct passwd *pw)
                            RP_ALLOW_STDIN);
                r = sshkey_load_private(identity_file, old_passphrase,
                    &private, &comment);
-               explicit_bzero(old_passphrase, strlen(old_passphrase));
-               free(old_passphrase);
+               freezero(old_passphrase, strlen(old_passphrase));
                if (r != 0)
                        goto badkey;
        } else if (r != 0) {
@@ -1456,8 +1454,7 @@ do_change_passphrase(struct passwd *pw)
                        exit(1);
                }
                /* Destroy the other copy. */
-               explicit_bzero(passphrase2, strlen(passphrase2));
-               free(passphrase2);
+               freezero(passphrase2, strlen(passphrase2));
        }
 
        /* Save the file using the new passphrase. */
@@ -1465,15 +1462,13 @@ do_change_passphrase(struct passwd *pw)
            comment, private_key_format, openssh_format_cipher, rounds)) != 0) {
                error("Saving key \"%s\" failed: %s.",
                    identity_file, ssh_err(r));
-               explicit_bzero(passphrase1, strlen(passphrase1));
-               free(passphrase1);
+               freezero(passphrase1, strlen(passphrase1));
                sshkey_free(private);
                free(comment);
                exit(1);
        }
        /* Destroy the passphrase and the copy of the key in memory. */
-       explicit_bzero(passphrase1, strlen(passphrase1));
-       free(passphrase1);
+       freezero(passphrase1, strlen(passphrase1));
        sshkey_free(private);            /* Destroys contents */
        free(comment);
 
@@ -1543,8 +1538,7 @@ do_change_comment(struct passwd *pw, const char *identity_comment)
                /* Try to load using the passphrase. */
                if ((r = sshkey_load_private(identity_file, passphrase,
                    &private, &comment)) != 0) {
-                       explicit_bzero(passphrase, strlen(passphrase));
-                       free(passphrase);
+                       freezero(passphrase, strlen(passphrase));
                        fatal("Cannot load private key \"%s\": %s.",
                            identity_file, ssh_err(r));
                }
@@ -1589,14 +1583,12 @@ do_change_comment(struct passwd *pw, const char *identity_comment)
            rounds)) != 0) {
                error("Saving key \"%s\" failed: %s",
                    identity_file, ssh_err(r));
-               explicit_bzero(passphrase, strlen(passphrase));
-               free(passphrase);
+               freezero(passphrase, strlen(passphrase));
                sshkey_free(private);
                free(comment);
                exit(1);
        }
-       explicit_bzero(passphrase, strlen(passphrase));
-       free(passphrase);
+       freezero(passphrase, strlen(passphrase));
        if ((r = sshkey_from_private(private, &public)) != 0)
                fatal("sshkey_from_private failed: %s", ssh_err(r));
        sshkey_free(private);
index 4c734fd7d5e27e2f4607c39b4e4b86f99852af62..ccd4c7600abac3d390e9a01c99d9f2542cb9c009 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-xmss.c,v 1.1 2018/02/23 15:58:38 markus Exp $*/
+/* $OpenBSD: ssh-xmss.c,v 1.2 2020/02/26 13:40:09 jsg Exp $*/
 /*
  * Copyright (c) 2017 Stefan-Lukas Gazdag.
  * Copyright (c) 2017 Markus Friedl.
@@ -103,10 +103,8 @@ ssh_xmss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
                r = ret;
        }
        sshbuf_free(b);
-       if (sig != NULL) {
-               explicit_bzero(sig, slen);
-               free(sig);
-       }
+       if (sig != NULL)
+               freezero(sig, slen);
 
        return r;
 }
@@ -177,14 +175,10 @@ ssh_xmss_verify(const struct sshkey *key,
        /* success */
        r = 0;
  out:
-       if (sm != NULL) {
-               explicit_bzero(sm, smlen);
-               free(sm);
-       }
-       if (m != NULL) {
-               explicit_bzero(m, smlen); /* NB mlen may be invalid if r != 0 */
-               free(m);
-       }
+       if (sm != NULL)
+               freezero(sm, smlen);
+       if (m != NULL)
+               freezero(m, smlen);
        sshbuf_free(b);
        free(ktype);
        return r;
index c0336e86765922ecfa8ad0faec50b49f69e44ca0..9b5aa208cd971e3d1a5c7c4ab779dc5c039660b5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sshbuf-misc.c,v 1.13 2020/01/25 23:28:06 djm Exp $    */
+/*     $OpenBSD: sshbuf-misc.c,v 1.14 2020/02/26 13:40:09 jsg Exp $    */
 /*
  * Copyright (c) 2011 Damien Miller
  *
@@ -156,17 +156,14 @@ sshbuf_b64tod(struct sshbuf *buf, const char *b64)
        if ((p = malloc(plen)) == NULL)
                return SSH_ERR_ALLOC_FAIL;
        if ((nlen = b64_pton(b64, p, plen)) < 0) {
-               explicit_bzero(p, plen);
-               free(p);
+               freezero(p, plen);
                return SSH_ERR_INVALID_FORMAT;
        }
        if ((r = sshbuf_put(buf, p, nlen)) < 0) {
-               explicit_bzero(p, plen);
-               free(p);
+               freezero(p, plen);
                return r;
        }
-       explicit_bzero(p, plen);
-       free(p);
+       freezero(p, plen);
        return 0;
 }
 
index f4f7a220f67cbe1a0a5780f5df9722ac629c4706..368ba7980b755a04efbcd99e3999f222b4510ec1 100644 (file)
--- a/sshbuf.c
+++ b/sshbuf.c
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sshbuf.c,v 1.14 2020/01/23 07:10:22 dtucker Exp $     */
+/*     $OpenBSD: sshbuf.c,v 1.15 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2011 Damien Miller
  *
@@ -164,8 +164,7 @@ sshbuf_free(struct sshbuf *buf)
                explicit_bzero(buf->d, buf->alloc);
                free(buf->d);
        }
-       explicit_bzero(buf, sizeof(*buf));
-       free(buf);
+       freezero(buf, sizeof(*buf));
 }
 
 void
index 57995ee68a22d995157587a0a775e8c1ff2bccca..63e568a04b62abadd61dd27ee155305028017656 100644 (file)
--- a/sshkey.c
+++ b/sshkey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshkey.c,v 1.99 2020/01/21 05:56:56 djm Exp $ */
+/* $OpenBSD: sshkey.c,v 1.100 2020/02/26 13:40:09 jsg Exp $ */
 /*
  * Copyright (c) 2000, 2001 Markus Friedl.  All rights reserved.
  * Copyright (c) 2008 Alexander von Gernler.  All rights reserved.
@@ -1019,10 +1019,8 @@ sshkey_fingerprint_raw(const struct sshkey *k, int dgst_alg,
        r = 0;
  out:
        free(ret);
-       if (blob != NULL) {
-               explicit_bzero(blob, blob_len);
-               free(blob);
-       }
+       if (blob != NULL)
+               freezero(blob, blob_len);
        return r;
 }
 
@@ -1280,12 +1278,10 @@ sshkey_fingerprint(const struct sshkey *k, int dgst_alg,
                    dgst_raw, dgst_raw_len, k);
                break;
        default:
-               explicit_bzero(dgst_raw, dgst_raw_len);
-               free(dgst_raw);
+               freezero(dgst_raw, dgst_raw_len);
                return NULL;
        }
-       explicit_bzero(dgst_raw, dgst_raw_len);
-       free(dgst_raw);
+       freezero(dgst_raw, dgst_raw_len);
        return retval;
 }
 
@@ -4054,18 +4050,12 @@ sshkey_private_to_blob2(struct sshkey *prv, struct sshbuf *blob,
        sshbuf_free(encrypted);
        cipher_free(ciphercontext);
        explicit_bzero(salt, sizeof(salt));
-       if (key != NULL) {
-               explicit_bzero(key, keylen + ivlen);
-               free(key);
-       }
-       if (pubkeyblob != NULL) {
-               explicit_bzero(pubkeyblob, pubkeylen);
-               free(pubkeyblob);
-       }
-       if (b64 != NULL) {
-               explicit_bzero(b64, strlen(b64));
-               free(b64);
-       }
+       if (key != NULL)
+               freezero(key, keylen + ivlen);
+       if (pubkeyblob != NULL) 
+               freezero(pubkeyblob, pubkeylen);
+       if (b64 != NULL) 
+               freezero(b64, strlen(b64));
        return r;
 }
 
@@ -4273,14 +4263,10 @@ sshkey_parse_private2(struct sshbuf *blob, int type, const char *passphrase,
        free(ciphername);
        free(kdfname);
        free(comment);
-       if (salt != NULL) {
-               explicit_bzero(salt, slen);
-               free(salt);
-       }
-       if (key != NULL) {
-               explicit_bzero(key, keylen + ivlen);
-               free(key);
-       }
+       if (salt != NULL)
+               freezero(salt, slen);
+       if (key != NULL)
+               freezero(key, keylen + ivlen);
        sshbuf_free(encoded);
        sshbuf_free(decoded);
        sshbuf_free(kdf);
diff --git a/umac.c b/umac.c
index 2a6b6ae6b48f896a0ba745feeda1a954830fba52..23132e94e11ea01a649234175a488d1faa19af94 100644 (file)
--- a/umac.c
+++ b/umac.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: umac.c,v 1.18 2019/11/13 04:47:52 deraadt Exp $ */
+/* $OpenBSD: umac.c,v 1.19 2020/02/26 13:40:09 jsg Exp $ */
 /* -----------------------------------------------------------------------
  *
  * umac.c -- C Implementation UMAC Message Authentication
@@ -1205,8 +1205,7 @@ int umac_delete(struct umac_ctx *ctx)
     if (ctx) {
         if (ALLOC_BOUNDARY)
             ctx = (struct umac_ctx *)ctx->free_ptr;
-        explicit_bzero(ctx, sizeof(*ctx) + ALLOC_BOUNDARY);
-        free(ctx);
+        freezero(ctx, sizeof(*ctx) + ALLOC_BOUNDARY);
     }
     return (1);
 }