diff options
author | djm@openbsd.org <djm@openbsd.org> | 2022-08-19 05:06:30 +0200 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2022-08-19 05:13:53 +0200 |
commit | 5062ad48814b06162511c4f5924a33d97b6b2566 (patch) | |
tree | f7ce0dc8605c0405897d1b9d1eb27ea0f70de7cb /sshsig.c | |
parent | Check for perms to run agent-getpeereid test. (diff) | |
download | openssh-5062ad48814b06162511c4f5924a33d97b6b2566.tar.xz openssh-5062ad48814b06162511c4f5924a33d97b6b2566.zip |
upstream: double free() in error path; from Eusgor via GHPR333
OpenBSD-Commit-ID: 39f35e16ba878c8d02b4d01d8826d9b321be26d4
Diffstat (limited to 'sshsig.c')
-rw-r--r-- | sshsig.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: sshsig.c,v 1.29 2022/03/30 04:27:51 djm Exp $ */ +/* $OpenBSD: sshsig.c,v 1.30 2022/08/19 03:06:30 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -491,7 +491,7 @@ hash_file(int fd, const char *hashalg, struct sshbuf **bp) { char *hex, rbuf[8192], hash[SSH_DIGEST_MAX_LENGTH]; ssize_t n, total = 0; - struct ssh_digest_ctx *ctx; + struct ssh_digest_ctx *ctx = NULL; int alg, oerrno, r = SSH_ERR_INTERNAL_ERROR; struct sshbuf *b = NULL; @@ -514,7 +514,6 @@ hash_file(int fd, const char *hashalg, struct sshbuf **bp) continue; oerrno = errno; error_f("read: %s", strerror(errno)); - ssh_digest_free(ctx); errno = oerrno; r = SSH_ERR_SYSTEM_ERROR; goto out; @@ -549,9 +548,11 @@ hash_file(int fd, const char *hashalg, struct sshbuf **bp) /* success */ r = 0; out: + oerrno = errno; sshbuf_free(b); ssh_digest_free(ctx); explicit_bzero(hash, sizeof(hash)); + errno = oerrno; return r; } |