From: Philippe Antoine Date: Wed, 15 Dec 2021 19:48:47 +0000 (+0100) Subject: fuzz: use fuzzing confyaml for protodetect target X-Git-Tag: suricata-6.0.5~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=384611da1a3c0a76d1bca25c0b68cdba1ea3dded;p=thirdparty%2Fsuricata.git fuzz: use fuzzing confyaml for protodetect target As is done for other targets, so that all app-layer protocols are enabled, even the ones disabled by default such as enip And resets protocol detection every time we try so that probing_parser_toserver_alproto_masks are fresh. (cherry picked from commit 09c84d0c26d58e4750ef2114699c9324b561bf4e) --- diff --git a/src/tests/fuzz/fuzz_applayerprotodetectgetproto.c b/src/tests/fuzz/fuzz_applayerprotodetectgetproto.c index bca53e1488..ec6da106f4 100644 --- a/src/tests/fuzz/fuzz_applayerprotodetectgetproto.c +++ b/src/tests/fuzz/fuzz_applayerprotodetectgetproto.c @@ -10,13 +10,15 @@ #include "flow-util.h" #include "app-layer-parser.h" #include "util-unittest-helper.h" - +#include "conf-yaml-loader.h" #define HEADER_LEN 6 //rule of thumb constant, so as not to timeout target #define PROTO_DETECT_MAX_LEN 1024 +#include "confyaml.c" + int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); AppLayerProtoDetectThreadCtx *alpd_tctx = NULL; @@ -37,6 +39,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) //global init InitGlobal(); run_mode = RUNMODE_UNITTEST; + if (ConfYamlLoadString(configNoChecksum, strlen(configNoChecksum)) != 0) { + abort(); + } MpmTableSetup(); SpmTableSetup(); AppLayerProtoDetectSetup(); @@ -62,7 +67,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) * Otherwise, we have evasion with TCP splitting */ for (size_t i = 0; i < size-HEADER_LEN && i < PROTO_DETECT_MAX_LEN; i++) { - alproto2 = AppLayerProtoDetectGetProto(alpd_tctx, f, data+HEADER_LEN, i, f->proto, data[0], &reverse); + // reset detection at each try cf probing_parser_toserver_alproto_masks + AppLayerProtoDetectReset(f); + alproto2 = AppLayerProtoDetectGetProto( + alpd_tctx, f, data + HEADER_LEN, i, f->proto, data[0], &reverse); if (alproto2 != ALPROTO_UNKNOWN && alproto2 != alproto) { printf("Failed with input length %" PRIuMAX " versus %" PRIuMAX ", found %s instead of %s\n",