From: Shivani Bhardwaj Date: Wed, 8 Jul 2020 07:10:46 +0000 (+0530) Subject: modbus: make subfunction uint16_t X-Git-Tag: suricata-6.0.0-beta1~249 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5a672fbcf0f0e214949e6fef09bf5bc350bfdb0;p=thirdparty%2Fsuricata.git modbus: make subfunction uint16_t --- diff --git a/src/detect-engine-modbus.c b/src/detect-engine-modbus.c index dc6dbe9bc0..7db6dd5791 100644 --- a/src/detect-engine-modbus.c +++ b/src/detect-engine-modbus.c @@ -230,10 +230,10 @@ int DetectEngineInspectModbus(ThreadVars *tv, if (modbus->category == MODBUS_CAT_NONE) { if (modbus->function != MODBUS_FUNC_NONE) { if (modbus->function == tx->function) { - if (modbus->subfunction != NULL) { + if (modbus->has_subfunction) { SCLogDebug("looking for Modbus server function %d and subfunction %d", - modbus->function, *(modbus->subfunction)); - ret = (*(modbus->subfunction) == (tx->subFunction))? 1 : 0; + modbus->function, modbus->subfunction); + ret = (modbus->subfunction == (tx->subFunction))? 1 : 0; } else { SCLogDebug("looking for Modbus server function %d", modbus->function); ret = 1; diff --git a/src/detect-modbus.c b/src/detect-modbus.c index 24075cd8f3..f064d67308 100644 --- a/src/detect-modbus.c +++ b/src/detect-modbus.c @@ -91,9 +91,6 @@ static void DetectModbusFree(DetectEngineCtx *de_ctx, void *ptr) { DetectModbus *modbus = (DetectModbus *) ptr; if(modbus) { - if (modbus->subfunction) - SCFree(modbus->subfunction); - if (modbus->unit_id) SCFree(modbus->unit_id); @@ -355,18 +352,14 @@ static DetectModbus *DetectModbusFunctionParse(DetectEngineCtx *de_ctx, const ch goto error; } - /* We have a correct address option */ - modbus->subfunction =(uint16_t *) SCCalloc(1, sizeof(uint16_t)); - if (modbus->subfunction == NULL) - goto error; - - if (StringParseUint16(&(*modbus->subfunction), 10, 0, (const char *)arg) < 0) { + if (StringParseUint16(&modbus->subfunction, 10, 0, (const char *)arg) < 0) { SCLogError(SC_ERR_INVALID_VALUE, "Invalid value for " "modbus subfunction: %s", (const char*)arg); goto error; } + modbus->has_subfunction = true; - SCLogDebug("and subfunction %d", *(modbus->subfunction)); + SCLogDebug("and subfunction %d", modbus->subfunction); } } else { uint8_t neg = 0; @@ -627,7 +620,7 @@ static int DetectModbusTest02(void) modbus = (DetectModbus *) de_ctx->sig_list->sm_lists_tail[g_modbus_buffer_id]->ctx; FAIL_IF_NOT(modbus->function == 8); - FAIL_IF_NOT(*modbus->subfunction == 4); + FAIL_IF_NOT(modbus->subfunction == 4); SigGroupCleanup(de_ctx); SigCleanSignatures(de_ctx); @@ -908,7 +901,7 @@ static int DetectModbusTest11(void) FAIL_IF_NOT((*modbus->unit_id).min == 10); FAIL_IF_NOT((*modbus->unit_id).mode == mode); FAIL_IF_NOT(modbus->function == 8); - FAIL_IF_NOT((*modbus->subfunction) == 4); + FAIL_IF_NOT(modbus->subfunction == 4); SigGroupCleanup(de_ctx); SigCleanSignatures(de_ctx); diff --git a/src/detect-modbus.h b/src/detect-modbus.h index 8ec02c99cf..2a86052ac5 100644 --- a/src/detect-modbus.h +++ b/src/detect-modbus.h @@ -52,7 +52,8 @@ typedef struct DetectModbusValue_ { typedef struct DetectModbus_ { uint8_t category; /** < Modbus function code category to match */ uint8_t function; /** < Modbus function code to match */ - uint16_t *subfunction; /** < Modbus subfunction to match */ + uint16_t subfunction; /** < Modbus subfunction to match */ + bool has_subfunction; /** < Modbus subfunction indicator */ uint8_t type; /** < Modbus access type to match */ DetectModbusValue *unit_id; /** < Modbus unit id to match */ DetectModbusValue *address; /** < Modbus address to match */