]> source.dussan.org Git - rspamd.git/commitdiff
Add workaround for bug in valgrind and rdrand
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Jan 2016 16:11:53 +0000 (16:11 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Jan 2016 16:11:53 +0000 (16:11 +0000)
contrib/libottery/ottery_entropy_rdrand.c
contrib/libottery/ottery_global.c

index 62e158c830e250fcd78474434085a8a5fd34af2d..c5f12609b2f7aacbe3158f3d41ee60e4aa8358b4 100644 (file)
@@ -19,6 +19,7 @@
     defined(_M_IX86) || \
     defined(__INTEL_COMPILER)
 
+extern int ottery_valgrind_;
 /** Helper: invoke the RDRAND instruction to get 4 random bytes in the output
  * value. Return 0 on success, and an error on failure. */
 static int
@@ -39,7 +40,7 @@ ottery_get_entropy_rdrand(const struct ottery_entropy_config *cfg,
   uint32_t *up = (uint32_t *) out;
   (void) cfg;
   (void) state;
-  if (! (ottery_get_cpu_capabilities_() & OTTERY_CPUCAP_RAND))
+  if (! (ottery_get_cpu_capabilities_() & OTTERY_CPUCAP_RAND) || ottery_valgrind_)
     return OTTERY_ERR_INIT_STRONG_RNG;
   while (outlen >= 4) {
     if ((err = rdrand(up)))
index 3c814f5ecdf1d83da2a5c44db4e4001076082958..6bd205b4f4defbcffbb3daf7c6d31e1579710f21 100644 (file)
@@ -20,6 +20,7 @@
 
 /** Flag: true iff ottery_global_state_ is initialized. */
 static int ottery_global_state_initialized_ = 0;
+int ottery_valgrind_ = 0;
 /** A global state to use for the ottery_* functions that don't take a
  * state. */
 static struct ottery_state ottery_global_state_;
@@ -41,6 +42,9 @@ ottery_init(const struct ottery_config *cfg)
   int n = ottery_st_init(&ottery_global_state_, cfg);
   if (n == 0)
        ottery_global_state_initialized_ = 1;
+  if (getenv("VALGRIND")) {
+         ottery_valgrind_ = 1;
+  }
   return n;
 }