From: Philippe Antoine Date: Tue, 29 Oct 2024 10:27:30 +0000 (+0100) Subject: profiling: use dynamic number of app-layer protos X-Git-Tag: suricata-8.0.0-beta1~603 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b76c78cb9c8f8ba1583b78d2de38a590cb5dae1;p=thirdparty%2Fsuricata.git profiling: use dynamic number of app-layer protos Ticket: 5053 --- diff --git a/src/util-profiling.c b/src/util-profiling.c index 80d3938bd4..20fcc7f980 100644 --- a/src/util-profiling.c +++ b/src/util-profiling.c @@ -72,8 +72,8 @@ SCProfilePacketData packet_profile_data6[257]; /**< all proto's + tunnel */ SCProfilePacketData packet_profile_tmm_data4[TMM_SIZE][257]; SCProfilePacketData packet_profile_tmm_data6[TMM_SIZE][257]; -SCProfilePacketData packet_profile_app_data4[ALPROTO_MAX][257]; -SCProfilePacketData packet_profile_app_data6[ALPROTO_MAX][257]; +SCProfilePacketData *packet_profile_app_data4; +SCProfilePacketData *packet_profile_app_data6; SCProfilePacketData packet_profile_app_pd_data4[257]; SCProfilePacketData packet_profile_app_pd_data6[257]; @@ -158,8 +158,14 @@ SCProfilingInit(void) memset(&packet_profile_data6, 0, sizeof(packet_profile_data6)); memset(&packet_profile_tmm_data4, 0, sizeof(packet_profile_tmm_data4)); memset(&packet_profile_tmm_data6, 0, sizeof(packet_profile_tmm_data6)); - memset(&packet_profile_app_data4, 0, sizeof(packet_profile_app_data4)); - memset(&packet_profile_app_data6, 0, sizeof(packet_profile_app_data6)); + packet_profile_app_data4 = SCCalloc(ALPROTO_MAX * 257, sizeof(SCProfilePacketData)); + if (packet_profile_app_data4 == NULL) { + FatalError("Failed to allocate packet_profile_app_data4"); + } + packet_profile_app_data6 = SCCalloc(ALPROTO_MAX * 257, sizeof(SCProfilePacketData)); + if (packet_profile_app_data6 == NULL) { + FatalError("Failed to allocate packet_profile_app_data6"); + } memset(&packet_profile_app_pd_data4, 0, sizeof(packet_profile_app_pd_data4)); memset(&packet_profile_app_pd_data6, 0, sizeof(packet_profile_app_pd_data6)); memset(&packet_profile_detect_data4, 0, sizeof(packet_profile_detect_data4)); @@ -269,6 +275,15 @@ SCProfilingInit(void) void SCProfilingDestroy(void) { + if (packet_profile_app_data4) { + SCFree(packet_profile_app_data4); + packet_profile_app_data4 = NULL; + } + if (packet_profile_app_data6) { + SCFree(packet_profile_app_data6); + packet_profile_app_data6 = NULL; + } + if (profiling_packets_enabled) { pthread_mutex_destroy(&packet_profile_lock); } @@ -490,16 +505,16 @@ void SCProfilingDumpPacketStats(void) total = 0; for (AppProto a = 0; a < ALPROTO_MAX; a++) { for (int p = 0; p < 257; p++) { - SCProfilePacketData *pd = &packet_profile_app_data4[a][p]; + SCProfilePacketData *pd = &packet_profile_app_data4[a * 257 + p]; total += pd->tot; - pd = &packet_profile_app_data6[a][p]; + pd = &packet_profile_app_data6[a * 257 + p]; total += pd->tot; } } for (AppProto a = 0; a < ALPROTO_MAX; a++) { for (int p = 0; p < 257; p++) { - SCProfilePacketData *pd = &packet_profile_app_data4[a][p]; + SCProfilePacketData *pd = &packet_profile_app_data4[a * 257 + p]; if (pd->cnt == 0) { continue; } @@ -518,7 +533,7 @@ void SCProfilingDumpPacketStats(void) for (AppProto a = 0; a < ALPROTO_MAX; a++) { for (int p = 0; p < 257; p++) { - SCProfilePacketData *pd = &packet_profile_app_data6[a][p]; + SCProfilePacketData *pd = &packet_profile_app_data6[a * 257 + p]; if (pd->cnt == 0) { continue; } @@ -918,9 +933,9 @@ static void SCProfilingUpdatePacketAppRecord(int alproto, uint8_t ipproto, PktPr SCProfilePacketData *pd; if (ipver == 4) - pd = &packet_profile_app_data4[alproto][ipproto]; + pd = &packet_profile_app_data4[alproto * 257 + ipproto]; else - pd = &packet_profile_app_data6[alproto][ipproto]; + pd = &packet_profile_app_data6[alproto * 257 + ipproto]; if (pd->min == 0 || pdt->ticks_spent < pd->min) { pd->min = pdt->ticks_spent;