From: Victor Julien Date: Mon, 12 Oct 2015 08:39:16 +0000 (+0200) Subject: mpm: ac use internal pattern id tracking X-Git-Tag: suricata-3.1RC1~352 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4edb03ab9d6ede0afb539687a36829913691f1b2;p=thirdparty%2Fsuricata.git mpm: ac use internal pattern id tracking --- diff --git a/src/util-mpm-ac.c b/src/util-mpm-ac.c index d5b535f51a..85acc77b5f 100644 --- a/src/util-mpm-ac.c +++ b/src/util-mpm-ac.c @@ -990,7 +990,7 @@ static void SCACPrintDeltaTable(MpmCtx *mpm_ctx) * * \param mpm_ctx Pointer to the mpm context. */ -static inline void SCACPrepareStateTable(MpmCtx *mpm_ctx) +static void SCACPrepareStateTable(MpmCtx *mpm_ctx) { SCACCtx *ctx = (SCACCtx *)mpm_ctx->ctx; @@ -1131,6 +1131,8 @@ int SCACPreparePatterns(MpmCtx *mpm_ctx) mpm_ctx->memory_cnt--; mpm_ctx->memory_size -= (mpm_ctx->pattern_cnt * sizeof(SCACPattern *)); + ctx->pattern_id_bitarray_size = (ctx->max_pat_id / 8) + 1; + return 0; error: @@ -1314,8 +1316,8 @@ uint32_t SCACSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx, /* \todo Change it for stateful MPM. Supply the state using mpm_thread_ctx */ SCACPatternList *pid_pat_list = ctx->pid_pat_list; - uint8_t bitarray[pmq->pattern_id_bitarray_size]; - memset(bitarray, 0, pmq->pattern_id_bitarray_size); + uint8_t bitarray[ctx->pattern_id_bitarray_size]; + memset(bitarray, 0, ctx->pattern_id_bitarray_size); if (ctx->state_count < 32767) { register SC_AC_STATE_TYPE_U16 state = 0; diff --git a/src/util-mpm-ac.h b/src/util-mpm-ac.h index ac6f464677..394ad6781f 100644 --- a/src/util-mpm-ac.h +++ b/src/util-mpm-ac.h @@ -84,6 +84,9 @@ typedef struct SCACCtx_ { /* no of states used by ac */ uint32_t state_count; + + uint32_t pattern_id_bitarray_size; + /* the all important memory hungry state_table */ SC_AC_STATE_TYPE_U16 (*state_table_u16)[256]; /* the all important memory hungry state_table */