diff options
author | Tim Taubert <ttaubert@mozilla.com> | 2017-03-31 16:32:54 +0200 |
---|---|---|
committer | Tim Taubert <ttaubert@mozilla.com> | 2017-03-31 16:32:54 +0200 |
commit | a1d6082c30f4bfea3f08a1c698a3e39adfd2f94a (patch) | |
tree | 5ea43964710e494b3f9f45b2da86b8bdf5234695 /fuzz/tls_server_target.cc | |
parent | 6f031f8434c7a2406a69d972e1414caa23e08ad4 (diff) | |
download | nss-hg-a1d6082c30f4bfea3f08a1c698a3e39adfd2f94a.tar.gz |
Bug 1351600 - Add DTLS client and server fuzzers r=franziskus
Differential Revision: https://nss-review.dev.mozaws.net/D282
Diffstat (limited to 'fuzz/tls_server_target.cc')
-rw-r--r-- | fuzz/tls_server_target.cc | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/fuzz/tls_server_target.cc b/fuzz/tls_server_target.cc index 67193368f..0c0902077 100644 --- a/fuzz/tls_server_target.cc +++ b/fuzz/tls_server_target.cc @@ -17,6 +17,20 @@ #include "tls_server_config.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 +} + class SSLServerSessionCache { public: SSLServerSessionCache() { @@ -56,9 +70,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 } static PRStatus InitModelSocket(void* arg) { @@ -88,7 +104,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t len) { assert(RNG_RandomUpdate(NULL, 0) == SECSuccess); // Create model socket. - static ScopedPRFileDesc model(SSL_ImportFD(nullptr, PR_NewTCPSocket())); + static ScopedPRFileDesc model(ImportFD(nullptr, PR_NewTCPSocket())); assert(model); // Initialize the model socket once. @@ -99,7 +115,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-server"); ScopedPRFileDesc fd(DummyIOLayerMethods::CreateFD(id, socket.get())); - PRFileDesc* ssl_fd = SSL_ImportFD(model.get(), fd.get()); + PRFileDesc* ssl_fd = ImportFD(model.get(), fd.get()); assert(ssl_fd == fd.get()); SetSocketOptions(ssl_fd, config); @@ -110,9 +126,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); } @@ -120,5 +136,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); } |