]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
modbus: stop allocating transactions when flooded
authorPhilippe Antoine <contact@catenacyber.fr>
Thu, 17 Dec 2020 20:48:54 +0000 (21:48 +0100)
committerVictor Julien <victor@inliniac.net>
Sat, 27 Feb 2021 17:46:19 +0000 (18:46 +0100)
cf #4224

(cherry picked from commit 89030d3e59e23d4850ac9a7db5763c3d4d4fd537)

src/app-layer-modbus.c

index 97cfa7e3365817fc9ad2e0e735dbac022f0cc709..96976cc1e97e3b85b3b2e287cce143faa6efd067 100644 (file)
@@ -316,6 +316,13 @@ static ModbusTransaction *ModbusTxFindByTransaction(const ModbusState   *modbus,
 static ModbusTransaction *ModbusTxAlloc(ModbusState *modbus) {
     ModbusTransaction *tx;
 
+    /* Check flood limit */
+    if ((request_flood != 0) && (modbus->unreplied_cnt >= request_flood)) {
+        ModbusSetEvent(modbus, MODBUS_DECODER_EVENT_FLOODED);
+        modbus->givenup = 1;
+        return NULL;
+    }
+
     tx = (ModbusTransaction *) SCCalloc(1, sizeof(ModbusTransaction));
     if (unlikely(tx == NULL))
         return NULL;
@@ -323,12 +330,6 @@ static ModbusTransaction *ModbusTxAlloc(ModbusState *modbus) {
     modbus->transaction_max++;
     modbus->unreplied_cnt++;
 
-    /* Check flood limit */
-    if ((request_flood != 0) && (modbus->unreplied_cnt > request_flood)) {
-        ModbusSetEvent(modbus, MODBUS_DECODER_EVENT_FLOODED);
-        modbus->givenup = 1;
-    }
-
     modbus->curr = tx;
 
     SCLogDebug("modbus->transaction_max updated to %"PRIu64, modbus->transaction_max);