mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-13 06:33:44 +01:00
Add a last-ditch memwipe() implementation for nss+old glibc
On new glibc versions, there's an explicit_bzero(). With openssl, there's openssl_memwipe(). When no other approach works, use memwipe() and a memory barrier.
This commit is contained in:
parent
06c14f9209
commit
8cd091a8d3
@ -80,7 +80,7 @@ memwipe(void *mem, uint8_t byte, size_t sz)
|
|||||||
#elif defined(HAVE_MEMSET_S)
|
#elif defined(HAVE_MEMSET_S)
|
||||||
/* This is in the C99 standard. */
|
/* This is in the C99 standard. */
|
||||||
memset_s(mem, sz, 0, sz);
|
memset_s(mem, sz, 0, sz);
|
||||||
#else
|
#elif defined(ENABLE_OPENSSL)
|
||||||
/* This is a slow and ugly function from OpenSSL that fills 'mem' with junk
|
/* This is a slow and ugly function from OpenSSL that fills 'mem' with junk
|
||||||
* based on the pointer value, then uses that junk to update a global
|
* based on the pointer value, then uses that junk to update a global
|
||||||
* variable. It's an elaborate ruse to trick the compiler into not
|
* variable. It's an elaborate ruse to trick the compiler into not
|
||||||
@ -93,6 +93,9 @@ memwipe(void *mem, uint8_t byte, size_t sz)
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
OPENSSL_cleanse(mem, sz);
|
OPENSSL_cleanse(mem, sz);
|
||||||
|
#else
|
||||||
|
memset(mem, 0, sz);
|
||||||
|
asm volatile ("" ::: "memory");
|
||||||
#endif /* defined(SecureZeroMemory) || defined(HAVE_SECUREZEROMEMORY) || ... */
|
#endif /* defined(SecureZeroMemory) || defined(HAVE_SECUREZEROMEMORY) || ... */
|
||||||
|
|
||||||
/* Just in case some caller of memwipe() is relying on getting a buffer
|
/* Just in case some caller of memwipe() is relying on getting a buffer
|
||||||
@ -105,4 +108,5 @@ memwipe(void *mem, uint8_t byte, size_t sz)
|
|||||||
* if somebody accidentally calls memwipe() instead of memset().
|
* if somebody accidentally calls memwipe() instead of memset().
|
||||||
**/
|
**/
|
||||||
memset(mem, byte, sz);
|
memset(mem, byte, sz);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user