Don't override the clock in BORINGSSL_UNSAFE_DETERMINISTIC_MODE Instead, do it in a callback in the fuzzer itself. This removes a part of BORINGSSL_UNSAFE_DETERMINISTIC_MODE that is probably a little tricky to use automatically as FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION. Bug: 42290128 Change-Id: Ie3a62e25b099b4cb4ca1c16581beb04fc9d9930e Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/77748 Commit-Queue: David Benjamin <davidben@google.com> Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Bob Beck <bbe@google.com>
diff --git a/FUZZING.md b/FUZZING.md index 89cf5e9..5e0bb3e 100644 --- a/FUZZING.md +++ b/FUZZING.md
@@ -52,8 +52,6 @@ * Replace `RAND_bytes` with a deterministic PRNG. Call `RAND_reset_for_fuzzing()` at the start of fuzzers which use `RAND_bytes` to reset the PRNG state. -* Use a hard-coded time instead of the actual time. - Additionally, if `BORINGSSL_UNSAFE_FUZZER_MODE` is set, BoringSSL will: * Modify the TLS stack to perform all signature checks (CertificateVerify and ServerKeyExchange) and the Finished check, but always act as if the check succeeded.
diff --git a/ssl/ssl_lib.cc b/ssl/ssl_lib.cc index 10b062a..3ef8e03 100644 --- a/ssl/ssl_lib.cc +++ b/ssl/ssl_lib.cc
@@ -255,9 +255,7 @@ } } -#if defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE) - return {1234, 1234}; -#elif defined(OPENSSL_WINDOWS) +#if defined(OPENSSL_WINDOWS) struct _timeb time; _ftime(&time); if (time.time < 0) {
diff --git a/ssl/ssl_test.cc b/ssl/ssl_test.cc index 9f9caf1..8d883cb 100644 --- a/ssl/ssl_test.cc +++ b/ssl/ssl_test.cc
@@ -1133,11 +1133,7 @@ return nullptr; } // Fix up the timeout. -#if defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE) - SSL_SESSION_set_time(session.get(), 1234); -#else SSL_SESSION_set_time(session.get(), time(nullptr)); -#endif return session; }
diff --git a/ssl/test/fuzzer.h b/ssl/test/fuzzer.h index d01808f..866bd3f 100644 --- a/ssl/test/fuzzer.h +++ b/ssl/test/fuzzer.h
@@ -405,6 +405,12 @@ return false; } + // Use a constant clock. + SSL_CTX_set_current_time_cb(ctx_.get(), + [](const SSL *ssl, timeval *out_clock) { + *out_clock = {1234, 1234}; + }); + // When accepting peer certificates, allow any certificate. SSL_CTX_set_cert_verify_callback( ctx_.get(),