]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
app-layer/counters: check counter id
authorVictor Julien <victor@inliniac.net>
Wed, 13 Dec 2017 09:28:19 +0000 (10:28 +0100)
committerVictor Julien <victor@inliniac.net>
Tue, 30 Jan 2018 09:32:16 +0000 (10:32 +0100)
Check counter id before updating a counter. In case of a disabled
parser with the protocol detection enable, the id can be 0. In
debug mode this would lead to a BUG_ON.

src/app-layer.c

index dee505be76a9cc06e137360c9f1e69c2803b6b1c..7b22a3846134ddd43cfd5a09487007acde8b3ace 100644 (file)
@@ -95,17 +95,23 @@ static inline int ProtoDetectDone(const Flow *f, const TcpSession *ssn, uint8_t
             (FLOW_IS_PM_DONE(f, direction) && FLOW_IS_PP_DONE(f, direction)));
 }
 
+/**
+ * \note id can be 0 if protocol parser is disabled but detection
+ *       is enabled.
+ */
 static void AppLayerIncFlowCounter(ThreadVars *tv, Flow *f)
 {
-    if (likely(tv)) {
-        StatsIncr(tv, applayer_counters[f->protomap][f->alproto].counter_id);
+    const uint16_t id = applayer_counters[f->protomap][f->alproto].counter_id;
+    if (likely(tv && id > 0)) {
+        StatsIncr(tv, id);
     }
 }
 
 void AppLayerIncTxCounter(ThreadVars *tv, Flow *f, uint64_t step)
 {
-    if (likely(tv)) {
-        StatsAddUI64(tv, applayer_counters[f->protomap][f->alproto].counter_tx_id, step);
+    const uint16_t id = applayer_counters[f->protomap][f->alproto].counter_tx_id;
+    if (likely(tv && id > 0)) {
+        StatsAddUI64(tv, id, step);
     }
 }