diff options
Diffstat (limited to 'fuzz/tls_client_target.cc')
-rw-r--r-- | fuzz/tls_client_target.cc | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/fuzz/tls_client_target.cc b/fuzz/tls_client_target.cc index 82e4a5dfb..e59550984 100644 --- a/fuzz/tls_client_target.cc +++ b/fuzz/tls_client_target.cc @@ -16,6 +16,20 @@ #include "tls_mutators.h" #include "tls_socket.h" +#ifdef IS_DTLS +__attribute__((constructor)) static void set_is_dtls() { + TlsMutators::SetIsDTLS(); +} +#endif + +PRFileDesc* ImportFD(PRFileDesc* model, PRFileDesc* fd) { +#ifdef IS_DTLS + return DTLS_ImportFD(model, fd); +#else + return SSL_ImportFD(model, fd); +#endif +} + static SECStatus AuthCertificateHook(void* arg, PRFileDesc* fd, PRBool checksig, PRBool isServer) { assert(!isServer); @@ -49,9 +63,11 @@ static void SetSocketOptions(PRFileDesc* fd, config->RequireSafeNegotiation()); assert(rv == SECSuccess); +#ifndef IS_DTLS rv = SSL_OptionSet(fd, SSL_ENABLE_RENEGOTIATION, SSL_RENEGOTIATE_UNRESTRICTED); assert(rv == SECSuccess); +#endif } // This is only called when we set SSL_ENABLE_FALSE_START=1, @@ -87,7 +103,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t len) { std::unique_ptr<DummyPrSocket> socket(new DummyPrSocket(data, len)); static PRDescIdentity id = PR_GetUniqueIdentity("fuzz-client"); ScopedPRFileDesc fd(DummyIOLayerMethods::CreateFD(id, socket.get())); - PRFileDesc* ssl_fd = SSL_ImportFD(nullptr, fd.get()); + PRFileDesc* ssl_fd = ImportFD(nullptr, fd.get()); assert(ssl_fd == fd.get()); // Probably not too important for clients. @@ -103,9 +119,9 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t len) { extern "C" size_t LLVMFuzzerCustomMutator(uint8_t* data, size_t size, size_t max_size, unsigned int seed) { - return CustomMutate({TlsMutatorDropRecord, TlsMutatorShuffleRecords, - TlsMutatorDuplicateRecord, TlsMutatorTruncateRecord, - TlsMutatorFragmentRecord}, + using namespace TlsMutators; + return CustomMutate({DropRecord, ShuffleRecords, DuplicateRecord, + TruncateRecord, FragmentRecord}, data, size, max_size, seed); } @@ -113,5 +129,6 @@ extern "C" size_t LLVMFuzzerCustomCrossOver(const uint8_t* data1, size_t size1, const uint8_t* data2, size_t size2, uint8_t* out, size_t max_out_size, unsigned int seed) { - return TlsCrossOver(data1, size1, data2, size2, out, max_out_size, seed); + return TlsMutators::CrossOver(data1, size1, data2, size2, out, max_out_size, + seed); } |