]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
gnutls_memset: use explicit_bzero
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Tue, 7 Aug 2018 14:27:19 +0000 (16:27 +0200)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 8 Aug 2018 14:32:19 +0000 (16:32 +0200)
That is, use the glibc function when available and the second
parameter is zero.

Resolves #230

Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
configure.ac
lib/safe-memfuncs.c
tests/Makefile.am
tests/memset.c

index 9e16a5cd07f128f9e74f4a1a472bcdbabcf35583..3001d212e114aeaa549a7db8293421f84712bd13 100644 (file)
@@ -293,7 +293,7 @@ AC_C_BIGENDIAN
 
 dnl No fork on MinGW, disable some self-tests until we fix them.
 dnl Check clock_gettime and pthread_mutex_lock in libc (avoid linking to other libs)
-AC_CHECK_FUNCS([fork setitimer inet_ntop inet_pton getrusage getpwuid_r nanosleep daemon getpid localtime vasprintf mmap],,)
+AC_CHECK_FUNCS([fork setitimer inet_ntop inet_pton getrusage getpwuid_r nanosleep daemon getpid localtime vasprintf mmap explicit_bzero],,)
 dnl Manually check some functions by including headers first. On macOS, you
 dnl normally only have the latest SDK available, containing all existing
 dnl functions, but having them restricted according to target version in
index e5673e5737d3e2470b6ce902912994a4be24874d..5e413c948695b277bde3931fe78650618cf12c09 100644 (file)
  *
  */
 
-#ifdef TEST_SAFE_MEMSET
-# include <string.h>
-#else
-# include "gnutls_int.h"
-#endif
+#include "gnutls_int.h"
+#include <string.h>
 
 /**
  * gnutls_memset:
  * This function will operate similarly to memset(), but will
  * not be optimized out by the compiler.
  *
- * Returns: void.
- *
  * Since: 3.4.0
  **/
 void gnutls_memset(void *data, int c, size_t size)
 {
-       volatile unsigned volatile_zero = 0;
+       volatile unsigned volatile_zero;
        volatile char *vdata = (volatile char*)data;
+#ifdef HAVE_EXPLICIT_BZERO
+       if (c == 0) {
+               explicit_bzero(data, size);
+       }
+#endif
+       volatile_zero = 0;
 
        /* This is based on a nice trick for safe memset,
         * sent by David Jacobson in the openssl-dev mailing list.
index 87da31a25d20b33eae71e9b7e0dc6157685597b6..646aa819bd0b30870e37ff4b315e21a74e7beb15 100644 (file)
@@ -147,13 +147,13 @@ ctests += mini-record-2 simple gnutls_hmac_fast set_pkcs12_cred cert certuniquei
         mini-emsgsize-dtls chainverify-unsorted mini-overhead tls12-ffdhe \
         mini-dtls-heartbeat mini-x509-callbacks key-openssl priorities priorities-groups       \
         gnutls_x509_privkey_import gnutls_x509_crt_list_import \
-        sign-verify-ext4 tls-neg-ext4-key resume-lifetime \
+        sign-verify-ext4 tls-neg-ext4-key resume-lifetime memset0 memset1 \
         mini-dtls-srtp rsa-encrypt-decrypt mini-loss-time gnutls-strcodes \
         mini-record mini-dtls-record handshake-timeout mini-record-range \
         mini-cert-status fips-mode-pthread rsa-psk global-init sec-params sign-verify-data \
         fips-test fips-override-test mini-global-load name-constraints x509-extensions \
         long-session-id mini-x509-callbacks-intr mini-dtls-lowmtu set_x509_key_file-late \
-        crlverify mini-dtls-discard init_fds mini-record-failure memset \
+        crlverify mini-dtls-discard init_fds mini-record-failure \
         tls12-rehandshake-cert-2 custom-urls set_x509_key_mem set_x509_key_file \
         mini-chain-unsorted x509-verify-with-crl mini-dtls-mtu privkey-verify-broken \
         mini-dtls-record-asym key-import-export priority-set priority-set2 \
@@ -236,6 +236,14 @@ fips_mode_pthread_LDADD = $(LDADD) -lpthread
 mini_dtls_pthread_LDADD = $(LDADD) -lpthread
 rng_pthread_LDADD = $(LDADD) -lpthread
 
+memset0_CFLAGS = -DCHAR=0x0
+memset0_SOURCES = memset.c
+memset0_LDADD = $(LDADD)
+
+memset1_CFLAGS = -DCHAR=0xa
+memset1_SOURCES = memset.c
+memset1_LDADD = $(LDADD)
+
 tls12_rollback_detection_CFLAGS = -DTLS12
 tls12_rollback_detection_SOURCES = tls13/rnd-rollback-detection.c
 tls12_rollback_detection_LDADD = $(LDADD) ../gl/libgnu.la
index 574df7caca878534d5323f6000e457165f37c6e9..b39f289b4a070c5c79bb0e628c5fc494069b8512 100644 (file)
@@ -33,7 +33,6 @@
 #include "utils.h"
 
 #define BUF_SIZE 128
-#define CHAR 0x0a
 
 void func1(void);
 void func2(void);