mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
common: Use platform memory zeroing function for wipememory
* common/mischelp.h (wipememory): Replace macro with function
prototype.
(wipememory2): Remove.
* common/mischelp.c (wipememory): New.
* configure.ac (AC_CHECK_FUNCS): Check for 'explicit_bzero' and
remove duplicated checks.
--
In new wipememory function, memory is cleared through platform
provided secure memory zeroing function, SecureZeroMemory
or explicit_bzero.
If none of these is available, memset is called through
volatile function pointer to so that compiler won't optimize
away the call.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
(cherry picked from commit 2a650772b4
)
This commit is contained in:
parent
edeebe0a6b
commit
21fdef6963
3 changed files with 30 additions and 21 deletions
|
@ -49,6 +49,22 @@
|
|||
#include "mischelp.h"
|
||||
|
||||
|
||||
void
|
||||
wipememory (void *ptr, size_t len)
|
||||
{
|
||||
#if defined(HAVE_W32_SYSTEM) && defined(SecureZeroMemory)
|
||||
SecureZeroMemory (ptr, len);
|
||||
#elif defined(HAVE_EXPLICIT_BZERO)
|
||||
explicit_bzero (ptr, len);
|
||||
#else
|
||||
/* Prevent compiler from optimizing away the call to memset by accessing
|
||||
memset through volatile pointer. */
|
||||
static void *(*volatile memset_ptr)(void *, int, size_t) = (void *)memset;
|
||||
memset_ptr (ptr, 0, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* Check whether the files NAME1 and NAME2 are identical. This is for
|
||||
example achieved by comparing the inode numbers of the files. */
|
||||
int
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue