diff options
author | Damien Miller <djm@cvs.openbsd.org> | 2020-05-26 01:59:47 +0000 |
---|---|---|
committer | Damien Miller <djm@cvs.openbsd.org> | 2020-05-26 01:59:47 +0000 |
commit | d7c4f66c050ffd2b12029a3e03890ebf6262f55b (patch) | |
tree | e9d88d366a8fc344ff61c9bb83cde9c737c93494 /usr.bin | |
parent | 13a3ec176a1c7aaca4cefd707b571225709e1a84 (diff) |
fix memleak of signature; from Pedro Martelletto
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/ssh/ssh-sk-helper.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/usr.bin/ssh/ssh-sk-helper.c b/usr.bin/ssh/ssh-sk-helper.c index 90e8b08abdd..76a11e2a8d8 100644 --- a/usr.bin/ssh/ssh-sk-helper.c +++ b/usr.bin/ssh/ssh-sk-helper.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-sk-helper.c,v 1.9 2020/01/25 23:13:09 djm Exp $ */ +/* $OpenBSD: ssh-sk-helper.c,v 1.10 2020/05/26 01:59:46 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -90,12 +90,12 @@ process_sign(struct sshbuf *req) { int r = SSH_ERR_INTERNAL_ERROR; struct sshbuf *resp, *kbuf; - struct sshkey *key; + struct sshkey *key = NULL; uint32_t compat; const u_char *message; - u_char *sig; - size_t msglen, siglen; - char *provider, *pin; + u_char *sig = NULL; + size_t msglen, siglen = 0; + char *provider = NULL, *pin = NULL; if ((r = sshbuf_froms(req, &kbuf)) != 0 || (r = sshbuf_get_cstring(req, &provider, NULL)) != 0 || @@ -131,8 +131,11 @@ process_sign(struct sshbuf *req) (r = sshbuf_put_string(resp, sig, siglen)) != 0) fatal("%s: buffer error: %s", __progname, ssh_err(r)); out: + sshkey_free(key); sshbuf_free(kbuf); free(provider); + if (sig != NULL) + freezero(sig, siglen); if (pin != NULL) freezero(pin, strlen(pin)); return resp; |