diff options
Diffstat (limited to 'fuzz')
-rw-r--r-- | fuzz/fuzz_config.cpp | 142 | ||||
-rw-r--r-- | fuzz/fuzz_ds_domain_classify.cpp | 33 | ||||
-rw-r--r-- | fuzz/fuzz_ds_hash.cpp | 21 |
3 files changed, 99 insertions, 97 deletions
diff --git a/fuzz/fuzz_config.cpp b/fuzz/fuzz_config.cpp index 708b4b048..a592e87a0 100644 --- a/fuzz/fuzz_config.cpp +++ b/fuzz/fuzz_config.cpp @@ -118,183 +118,183 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 365 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "tls", "certificate_expiration_threshold", cfg_value); ndpi_get_config(ndpi_info_mod, "tls", "certificate_expiration_threshold", cfg_value, sizeof(cfg_value)); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "tls", "application_blocks_tracking", cfg_value); ndpi_get_config(ndpi_info_mod, "tls", "application_blocks_tracking", cfg_value, sizeof(cfg_value)); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "tls", "metadata.sha1_fingerprint", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "tls", "metadata.ja3c_fingerprint", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "tls", "metadata.ja3s_fingerprint", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "tls", "metadata.ja4c_fingerprint", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "smtp", "tls_dissection", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "imap", "tls_dissection", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "pop", "tls_dissection", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "ftp", "tls_dissection", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "stun", "tls_dissection", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "stun", "max_packets_extra_dissection", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "stun", "metadata.attribute.response_origin", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "stun", "metadata.attribute.other_address", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "stun", "metadata.attribute.mapped_address", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "dns", "subclassification", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "dns", "process_response", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "http", "process_response", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 0x01 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "ookla", "dpi.aggressiveness", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "any", "log", cfg_value); ndpi_get_config(ndpi_info_mod, "any", "log", cfg_value, sizeof(cfg_value)); } if(fuzzed_data.ConsumeBool()) { pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, NDPI_MAX_SUPPORTED_PROTOCOLS + 1); /* + 1 to trigger invalid pid */ value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); - sprintf(cfg_proto, "%d", pid); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); + snprintf(cfg_proto, sizeof(cfg_proto), "%d", pid); /* TODO: we should try to map integer into name */ ndpi_set_config(ndpi_info_mod, cfg_proto, "log", cfg_value); ndpi_get_config(ndpi_info_mod, cfg_proto, "log", cfg_value, sizeof(cfg_value)); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, "any", "ip_list.load", cfg_value); ndpi_get_config(ndpi_info_mod, "any", "ip_list.load", cfg_value, sizeof(cfg_value)); } if(fuzzed_data.ConsumeBool()) { pid = fuzzed_data.ConsumeIntegralInRange<u_int16_t>(0, NDPI_MAX_SUPPORTED_PROTOCOLS + 1); /* + 1 to trigger invalid pid */ value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); - sprintf(cfg_proto, "%d", pid); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); + snprintf(cfg_proto, sizeof(cfg_proto), "%d", pid); ndpi_set_config(ndpi_info_mod, cfg_proto, "ip_list.load", cfg_value); ndpi_get_config(ndpi_info_mod, cfg_proto, "ip_list.load", cfg_value, sizeof(cfg_value)); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 255 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "packets_limit_per_flow", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "flow.direction_detection", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "flow.track_payload", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "tcp_ack_payload_heuristic", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "fully_encrypted_heuristic", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "libgcrypt.init", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 0x03 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "dpi.guess_on_giveup", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "flow_risk_lists.load", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "flow_risk.anonymous_subscriber.list.icloudprivaterelay.load", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "flow_risk.anonymous_subscriber.list.protonvpn.load", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "flow_risk.crawler_bot.list.load", cfg_value); } if(fuzzed_data.ConsumeBool()) { @@ -303,127 +303,127 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 3 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "log.level", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.ookla.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.ookla.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.ookla.scope", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.bittorrent.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.bittorrent.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.bittorrent.scope", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.zoom.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.zoom.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.zoom.scope", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.stun.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.stun.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.stun.scope", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.tls_cert.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.tls_cert.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.tls_cert.scope", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.mining.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.mining.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.mining.scope", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.msteams.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.msteams.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.msteams.scope", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.stun_zoom.size", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.stun_zoom.ttl", cfg_value); } if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "lru.stun_zoom.scope", cfg_value); } /* Configure one cache via index */ @@ -432,17 +432,17 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { name = ndpi_lru_cache_idx_to_name(static_cast<lru_cache_type>(idx)); if(name) { value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 / 2); /* max / 2 instead of max + 1 to avoid oom on oss-fuzzer */ - sprintf(cfg_param, "lru.%s.size", name); - sprintf(cfg_value, "%d", value); + snprintf(cfg_param, sizeof(cfg_param), "lru.%s.size", name); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value); ndpi_get_config(ndpi_info_mod, NULL, cfg_param, cfg_value, sizeof(cfg_value)); value = fuzzed_data.ConsumeIntegralInRange(0, 16777215 + 1); - sprintf(cfg_param, "lru.%s.ttl", name); - sprintf(cfg_value, "%d", value); + snprintf(cfg_param, sizeof(cfg_param), "lru.%s.ttl", name); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value); value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_param, "lru.%s.scope", name); - sprintf(cfg_value, "%d", value); + snprintf(cfg_param, sizeof(cfg_param), "lru.%s.scope", name); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, cfg_param, cfg_value); ndpi_get_config(ndpi_info_mod, NULL, cfg_param, cfg_value, sizeof(cfg_value)); } @@ -450,13 +450,13 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { /* Invalid parameter */ if(fuzzed_data.ConsumeBool()) { value = fuzzed_data.ConsumeIntegralInRange(0, 1 + 1); - sprintf(cfg_value, "%d", value); + snprintf(cfg_value, sizeof(cfg_value), "%d", value); ndpi_set_config(ndpi_info_mod, NULL, "foo", cfg_value); ndpi_get_config(ndpi_info_mod, NULL, "foo", cfg_value, sizeof(cfg_value)); } /* Invalid value */ if(fuzzed_data.ConsumeBool()) { - sprintf(cfg_value, "%s", "jjj"); + snprintf(cfg_value, sizeof(cfg_value), "%s", "jjj"); ndpi_set_config(ndpi_info_mod, NULL, "lru.stun_zoom.ttl", cfg_value); ndpi_get_config(ndpi_info_mod, NULL, "lru.stun_zoom.ttl", cfg_value, sizeof(cfg_value)); } @@ -492,13 +492,15 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { struct in_addr pin; struct in6_addr pin6; + u_int16_t suffix_id; + pin.s_addr = fuzzed_data.ConsumeIntegral<u_int32_t>(); ndpi_network_port_ptree_match(ndpi_info_mod, &pin, fuzzed_data.ConsumeIntegral<u_int16_t>()); for(i = 0; i < 16; i++) pin6.s6_addr[i] = fuzzed_data.ConsumeIntegral<u_int8_t>(); ndpi_network_port_ptree6_match(ndpi_info_mod, &pin6, fuzzed_data.ConsumeIntegral<u_int16_t>()); - ndpi_get_host_domain_suffix(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "www.bbc.co.uk"); + ndpi_get_host_domain_suffix(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "www.bbc.co.uk", &suffix_id); ndpi_get_host_domain(ndpi_info_mod, fuzzed_data.ConsumeBool() ? NULL : "www.bbc.co.uk"); /* Custom category configuration */ diff --git a/fuzz/fuzz_ds_domain_classify.cpp b/fuzz/fuzz_ds_domain_classify.cpp index ba97ad08d..8428c2b52 100644 --- a/fuzz/fuzz_ds_domain_classify.cpp +++ b/fuzz/fuzz_ds_domain_classify.cpp @@ -11,21 +11,27 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { u_int16_t i, num_iteration, is_added = 0; bool rc; ndpi_domain_classify *d; - u_int8_t class_id; + u_int16_t class_id; std::string value, value_added; - + struct ndpi_detection_module_struct *ndpi_struct; + NDPI_PROTOCOL_BITMASK all; + + ndpi_struct = ndpi_init_detection_module(NULL); + NDPI_BITMASK_SET_ALL(all); + ndpi_set_protocol_detection_bitmask2(ndpi_struct, &all); + /* To allow memory allocation failures */ fuzz_set_alloc_callbacks_and_seed(size); d = ndpi_domain_classify_alloc(); num_iteration = fuzzed_data.ConsumeIntegral<u_int8_t>(); + for (i = 0; i < num_iteration; i++) { - value = fuzzed_data.ConsumeBytesAsString(fuzzed_data.ConsumeIntegral<u_int8_t>()); - class_id = fuzzed_data.ConsumeIntegral<u_int8_t>(); - - rc = ndpi_domain_classify_add(d, class_id, value.c_str()); + class_id = fuzzed_data.ConsumeIntegral<u_int16_t>(); + rc = ndpi_domain_classify_add(ndpi_struct, d, class_id, (char*)value.c_str()); + /* Keep one random entry really added */ if (rc == true && is_added == 0 && fuzzed_data.ConsumeBool()) { value_added = value; @@ -33,28 +39,25 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { } } - ndpi_domain_classify_add_domains(d, + ndpi_domain_classify_add_domains(ndpi_struct, d, fuzzed_data.ConsumeIntegralInRange(0, NDPI_LAST_IMPLEMENTED_PROTOCOL - 1), fuzzed_data.ConsumeBool() ? (char *)"random_list.list" : (char *)"wrong_path"); - if (fuzzed_data.ConsumeBool()) - ndpi_domain_classify_finalize(d); - /* "Random" search */ num_iteration = fuzzed_data.ConsumeIntegral<u_int8_t>(); for (i = 0; i < num_iteration; i++) { value = fuzzed_data.ConsumeBytesAsString(fuzzed_data.ConsumeIntegral<u_int8_t>()); - - ndpi_domain_classify_contains(d, &class_id, value.c_str()); + ndpi_domain_classify_hostname(ndpi_struct, d, &class_id, (char *)value.c_str()); } + /* Search of an added entry */ if (is_added) { - ndpi_domain_classify_contains(d, &class_id, value_added.c_str()); + ndpi_domain_classify_hostname(ndpi_struct, d, &class_id, (char *)value_added.c_str()); } ndpi_domain_classify_size(d); - ndpi_domain_classify_free(d); - + + ndpi_exit_detection_module(ndpi_struct); return 0; } diff --git a/fuzz/fuzz_ds_hash.cpp b/fuzz/fuzz_ds_hash.cpp index 0b1e79e6d..9bb065365 100644 --- a/fuzz/fuzz_ds_hash.cpp +++ b/fuzz/fuzz_ds_hash.cpp @@ -6,17 +6,10 @@ #include <assert.h> #include "fuzzer/FuzzedDataProvider.h" -extern "C" void cleanup_func(ndpi_str_hash *h) { - (void)h; - /* Nothing to do */ - return; -} - extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { FuzzedDataProvider fuzzed_data(data, size); u_int16_t i, rc, num_iteration, data_len, is_added = 0; std::vector<char>value_added; - void *value; ndpi_str_hash *h = NULL; /* Just to have some data */ @@ -37,7 +30,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { data_len = fuzzed_data.ConsumeIntegralInRange(0, 127); std::vector<char>data = fuzzed_data.ConsumeBytes<char>(data_len); - rc = ndpi_hash_add_entry(&h, data.data(), data.size(), &i); + rc = ndpi_hash_add_entry(&h, data.data(), data.size(), (u_int16_t)i); /* Keep one random entry really added */ if (rc == 0 && fuzzed_data.ConsumeBool()) { value_added = data; @@ -48,19 +41,23 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { /* "Random" search */ num_iteration = fuzzed_data.ConsumeIntegral<u_int8_t>(); for (i = 0; i < num_iteration; i++) { + u_int16_t value16; + data_len = fuzzed_data.ConsumeIntegralInRange(0, 127); std::vector<char>data = fuzzed_data.ConsumeBytes<char>(data_len); - ndpi_hash_find_entry(h, data.data(), data.size(), &value); + ndpi_hash_find_entry(h, data.data(), data.size(), &value16); } /* Search of an added entry */ if (is_added) { - ndpi_hash_find_entry(h, value_added.data(), value_added.size(), &value); + u_int16_t value16; + ndpi_hash_find_entry(h, value_added.data(), value_added.size(), &value16); } if (fuzzed_data.ConsumeBool()) - ndpi_hash_free(NULL, cleanup_func); - ndpi_hash_free(&h, cleanup_func); + ndpi_hash_free(NULL); + + ndpi_hash_free(&h); return 0; } |