From 1fdd8749014cf390d6ea9dd4350146473362044e Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 6 Feb 2024 16:58:24 +0100 Subject: core: New function gpgrt_wipememory. * src/init.c (_gpgrt_wipememory): New. * src/visibility.c (gpgrt_wipememory): New. * src/visibility.h: Add it. * src/gpg-error.def.in: Ditto. * src/gpg-error.vers: Ditto. -- GnuPG-bug-id: 6954 --- src/init.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/init.c') diff --git a/src/init.c b/src/init.c index 493e3ba..c4b7e56 100644 --- a/src/init.c +++ b/src/init.c @@ -412,6 +412,25 @@ _gpgrt_free (void *a) } +void +_gpgrt_wipememory (void *ptr, size_t len) +{ + if (ptr && 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 + } +} + + void _gpg_err_set_errno (int err) { -- cgit v1.2.3