diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2018-08-31 16:52:33 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-09-03 18:19:58 +0200 |
commit | c1c32bda14cbcf140b9a45deb59248acb5d79c06 (patch) | |
tree | ac58f11794a917526cb7481c034126a20287525b /src/buffer.c | |
parent | a1b57d3b94491e0fca85513d18bd1c02b1835284 (diff) | |
download | libssh-c1c32bda14cbcf140b9a45deb59248acb5d79c06.tar.gz libssh-c1c32bda14cbcf140b9a45deb59248acb5d79c06.tar.xz libssh-c1c32bda14cbcf140b9a45deb59248acb5d79c06.zip |
buffer: Rewrite ssh_buffer_free()
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/buffer.c')
-rw-r--r-- | src/buffer.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/buffer.c b/src/buffer.c index c4fdc752..f9bf772d 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -129,19 +129,23 @@ struct ssh_buffer_struct *ssh_buffer_new(void) { * * \param[in] buffer The buffer to free. */ -void ssh_buffer_free(struct ssh_buffer_struct *buffer) { - if (buffer == NULL) { - return; - } - buffer_verify(buffer); +void ssh_buffer_free(struct ssh_buffer_struct *buffer) +{ + if (buffer == NULL) { + return; + } + buffer_verify(buffer); - if (buffer->data) { - /* burn the data */ - explicit_bzero(buffer->data, buffer->allocated); - SAFE_FREE(buffer->data); - } - explicit_bzero(buffer, sizeof(struct ssh_buffer_struct)); - SAFE_FREE(buffer); + if (buffer->secure && buffer->allocated > 0) { + /* burn the data */ + explicit_bzero(buffer->data, buffer->allocated); + SAFE_FREE(buffer->data); + + explicit_bzero(buffer, sizeof(struct ssh_buffer_struct)); + } else { + SAFE_FREE(buffer->data); + } + SAFE_FREE(buffer); } /** |