diff --git a/examples/lib/custom/main.c b/examples/lib/custom/main.c index b11b6e01d7e6..a689e454948f 100644 --- a/examples/lib/custom/main.c +++ b/examples/lib/custom/main.c @@ -253,7 +253,11 @@ int main(int argc, char **argv) * ThreadVars will be ready. */ SuricataInit(); - SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + if (DetectEngineEnabled()) { + SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + } else { + SCLogWarning("detection engine not enabled, rate filter callback not registered"); + } /* Spawn our worker threads. */ pthread_t worker; diff --git a/examples/lib/live/main.c b/examples/lib/live/main.c index 572a7dde241a..74ce13510503 100644 --- a/examples/lib/live/main.c +++ b/examples/lib/live/main.c @@ -306,7 +306,11 @@ int main(int argc, char **argv) * ThreadVars will be ready. */ SuricataInit(); - SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + if (DetectEngineEnabled()) { + SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + } else { + SCLogWarning("detection engine not enabled, rate filter callback not registered"); + } /* Spawn our worker threads, one for each interface. */ pthread_t workers[MAX_INTERFACES]; diff --git a/src/detect-engine.c b/src/detect-engine.c index c526154027b2..850f221256d7 100644 --- a/src/detect-engine.c +++ b/src/detect-engine.c @@ -5203,12 +5203,17 @@ void DetectLowerSetupCallback( } } -void SCDetectEngineRegisterRateFilterCallback(SCDetectRateFilterFunc fn, void *arg) +bool SCDetectEngineRegisterRateFilterCallback(SCDetectRateFilterFunc fn, void *arg) { DetectEngineCtx *de_ctx = DetectEngineGetCurrent(); + if (de_ctx == NULL) { + SCLogError("no detection engine available for rate filter callback registration"); + return false; + } de_ctx->RateFilterCallback = fn; de_ctx->rate_filter_callback_arg = arg; DetectEngineDeReference(&de_ctx); + return true; } int DetectEngineThreadCtxGetJsonContext(DetectEngineThreadCtx *det_ctx) diff --git a/src/detect.h b/src/detect.h index 9f1f5e0bfb59..37e923424dc9 100644 --- a/src/detect.h +++ b/src/detect.h @@ -1214,7 +1214,7 @@ typedef struct DetectEngineCtx_ { * This callback is added to the current detection engine and will be * copied to all future detection engines over rule reloads. */ -void SCDetectEngineRegisterRateFilterCallback(SCDetectRateFilterFunc cb, void *arg); +bool SCDetectEngineRegisterRateFilterCallback(SCDetectRateFilterFunc cb, void *arg); /* Engine groups profiles (low, medium, high, custom) */ enum {