From: Victor Julien Date: Mon, 12 Oct 2015 08:41:57 +0000 (+0200) Subject: mpm: ac-bs use internal pattern id tracking X-Git-Tag: suricata-3.1RC1~351 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=69d38a3222415dc2c7fc2ea2686f4c1c9b0dd2d4;p=thirdparty%2Fsuricata.git mpm: ac-bs use internal pattern id tracking --- diff --git a/src/util-mpm-ac-bs.c b/src/util-mpm-ac-bs.c index 23c37e8d03..ade031a4f3 100644 --- a/src/util-mpm-ac-bs.c +++ b/src/util-mpm-ac-bs.c @@ -1239,6 +1239,8 @@ int SCACBSPreparePatterns(MpmCtx *mpm_ctx) mpm_ctx->memory_cnt--; mpm_ctx->memory_size -= (mpm_ctx->pattern_cnt * sizeof(SCACBSPattern *)); + ctx->pattern_id_bitarray_size = (ctx->max_pat_id / 8) + 1; + return 0; error: @@ -1434,8 +1436,8 @@ uint32_t SCACBSSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx, /* \todo Change it for stateful MPM. Supply the state using mpm_thread_ctx */ SCACBSPatternList *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_BS_STATE_TYPE_U16 state = 0; diff --git a/src/util-mpm-ac-bs.h b/src/util-mpm-ac-bs.h index ce9c59fc5c..42d254c585 100644 --- a/src/util-mpm-ac-bs.h +++ b/src/util-mpm-ac-bs.h @@ -71,6 +71,9 @@ typedef struct SCACBSCtx_ { /* no of states used by ac */ uint32_t state_count; + + uint16_t pattern_id_bitarray_size; + /* the all important memory hungry state_table */ SC_AC_BS_STATE_TYPE_U16 (*state_table_u16)[256]; /* the all important memory hungry state_table */