From: Antony Polukhin Date: Tue, 6 Jun 2023 15:09:27 +0000 (+0300) Subject: Workaround false positive warning of MSAN in eng_rdrand.c X-Git-Tag: openssl-3.2.0-alpha1~687 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c4124a3a1373036141ee8f07fdd5806cab12aeb;p=thirdparty%2Fopenssl.git Workaround false positive warning of MSAN in eng_rdrand.c Reviewed-by: Paul Dale Reviewed-by: Tom Cosgrove Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/21136) --- diff --git a/crypto/engine/eng_rdrand.c b/crypto/engine/eng_rdrand.c index f46a5145974..6245d68206b 100644 --- a/crypto/engine/eng_rdrand.c +++ b/crypto/engine/eng_rdrand.c @@ -20,6 +20,12 @@ #include #include +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) +# include +# endif +#endif + #if (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || \ defined(_M_AMD64) || defined (_M_X64)) && defined(OPENSSL_CPUID_OBJ) @@ -32,6 +38,16 @@ static int get_random_bytes(unsigned char *buf, int num) return 0; } +# if defined(__has_feature) +# if __has_feature(memory_sanitizer) + /* + * MemorySanitizer fails to understand asm and produces false positive + * use-of-uninitialized-value warnings. + */ + __msan_unpoison(buf, num); +# endif +# endif + return (size_t)num == OPENSSL_ia32_rdrand_bytes(buf, (size_t)num); }