memory: Use explicit_bzero() as memwipe() if available
authorTobias Brunner <tobias@strongswan.org>
Thu, 18 Jul 2019 12:25:32 +0000 (14:25 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 22 Aug 2019 13:04:45 +0000 (15:04 +0200)
configure.ac
src/libstrongswan/utils/utils/memory.c
src/libstrongswan/utils/utils/memory.h

index 5dc1ae2..a8abfe6 100644 (file)
@@ -650,7 +650,7 @@ AC_CHECK_FUNC(
 )
 
 AC_CHECK_FUNCS(prctl mallinfo getpass closefrom getpwnam_r getgrnam_r getpwuid_r)
-AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime dirfd sigwaitinfo)
+AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime dirfd sigwaitinfo explicit_bzero)
 
 AC_CHECK_FUNC([syslog], [
        AC_DEFINE([HAVE_SYSLOG], [], [have syslog(3) and friends])
index 82c30d8..8248bc1 100644 (file)
@@ -60,6 +60,7 @@ void memxor(uint8_t dst[], const uint8_t src[], size_t n)
        }
 }
 
+#ifndef HAVE_EXPLICIT_BZERO
 /**
  * Described in header.
  */
@@ -67,6 +68,7 @@ void memwipe_noinline(void *ptr, size_t n)
 {
        memwipe_inline(ptr, n);
 }
+#endif /* HAVE_EXPLICIT_BZERO */
 
 /**
  * Described in header.
index 1dffe85..c257b1e 100644 (file)
 #ifndef MEMORY_H_
 #define MEMORY_H_
 
+#ifdef HAVE_EXPLICIT_BZERO
+#include <string.h>
+#endif
+
 /**
  * Helper function that compares two binary blobs for equality
  */
@@ -82,6 +86,9 @@ static inline void *memset_noop(void *s, int c, size_t n)
  */
 void memxor(uint8_t dest[], const uint8_t src[], size_t n);
 
+#ifdef HAVE_EXPLICIT_BZERO
+#define memwipe(ptr, n) explicit_bzero(ptr, n)
+#else /* HAVE_EXPLICIT_BZERO */
 /**
  * Safely overwrite n bytes of memory at ptr with zero, non-inlining variant.
  */
@@ -133,6 +140,7 @@ static inline void memwipe(void *ptr, size_t n)
                memwipe_noinline(ptr, n);
        }
 }
+#endif /* HAVE_EXPLICIT_BZERO */
 
 /**
  * A variant of strstr with the characteristics of memchr, where haystack is not