aboutsummaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2018-08-31 16:52:33 +0200
committerAndreas Schneider <asn@cryptomilk.org>2018-09-03 18:19:58 +0200
commitc1c32bda14cbcf140b9a45deb59248acb5d79c06 (patch)
treeac58f11794a917526cb7481c034126a20287525b /src/buffer.c
parenta1b57d3b94491e0fca85513d18bd1c02b1835284 (diff)
downloadlibssh-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.c28
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);
}
/**