Add a tor_str_wipe_and_free() function.

Frequently we want to do

    if (s) {
      memwipe(s, 0, sizeof(s));
      tor_free(s);
    }

and it's good to have a way to do this concisely.
This commit is contained in:
Nick Mathewson 2020-08-03 10:11:03 -04:00
parent c4742b89b2
commit 5b9508c9a5
2 changed files with 24 additions and 0 deletions

View file

@ -109,3 +109,17 @@ memwipe(void *mem, uint8_t byte, size_t sz)
**/
memset(mem, byte, sz);
}
/**
* Securely all memory in <b>str</b>, then free it.
*
* As tor_free(), tolerates null pointers.
**/
void
tor_str_wipe_and_free_(char *str)
{
if (!str)
return;
memwipe(str, 0, strlen(str));
tor_free_(str);
}

View file

@ -14,8 +14,18 @@
#define TOR_CRYPTO_UTIL_H
#include "lib/cc/torint.h"
#include "lib/malloc/malloc.h"
/** OpenSSL-based utility functions. */
void memwipe(void *mem, uint8_t byte, size_t sz);
void tor_str_wipe_and_free_(char *str);
/**
* Securely all memory in <b>str</b>, then free it.
*
* As tor_free(), tolerates null pointers, and sets <b>str</b> to NULL.
**/
#define tor_str_wipe_and_free(str) \
FREE_AND_NULL(char, tor_str_wipe_and_free_, (str))
#endif /* !defined(TOR_CRYPTO_UTIL_H) */