Make the random number generator predictable when fuzzing.

Reviewed-by: Rich Salz <rsalz@openssl.org>
GH: #2023
This commit is contained in:
Kurt Roeckx 2016-11-19 17:20:34 +01:00
parent 3a85d05fb3
commit 3a9b9b2deb
3 changed files with 12 additions and 3 deletions

View File

@ -33,7 +33,7 @@
# include <openssl/fips.h>
#endif
#ifdef BN_DEBUG
#if defined(BN_DEBUG) || defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
# define PREDICT
#endif
@ -307,7 +307,7 @@ static int rand_bytes(unsigned char *buf, int num, int pseudo)
#ifdef PREDICT
if (rand_predictable) {
static unsigned char val = 0;
unsigned char val = 0;
for (i = 0; i < num; i++)
buf[i] = val++;

View File

@ -38,7 +38,8 @@ Configure for fuzzing:
$ CC=clang ./config enable-fuzz-libfuzzer \
--with-fuzzer-include=../../svn-work/Fuzzer \
--with-fuzzer-lib=../../svn-work/Fuzzer/libFuzzer \
-DPEDANTIC enable-asan enable-ubsan no-shared
-DPEDANTIC enable-asan enable-ubsan no-shared \
-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
$ sudo apt-get install make
$ LDCMD=clang++ make -j
$ fuzz/helper.py $FUZZER

View File

@ -191,6 +191,10 @@ static const uint8_t kRSAPrivateKeyDER[] = {
static SSL_CTX *ctx;
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
extern int rand_predictable;
#endif
int FuzzerInitialize(int *argc, char ***argv)
{
const uint8_t *bufp = kRSAPrivateKeyDER;
@ -214,6 +218,10 @@ int FuzzerInitialize(int *argc, char ***argv)
OPENSSL_assert(ret == 1);
X509_free(cert);
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
rand_predictable = 1;
#endif
return 1;
}