diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2022-01-26 15:12:28 +0100 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2022-01-26 15:12:28 +0100 |
commit | 80e1eedbeffc697b759bc41e4a1865a99d4e1fbd (patch) | |
tree | 591bbd6c0c05f11fb04b83e5e751fcbfb4b83a0b /nDPId.c | |
parent | 4bae9d03446b814f3690db3e62dc4156972c2e8c (diff) |
nDPId: Added some error messages when workflow init fails.
* Fixed invalid array subscript typ0 (caused some trouble..)
* bump libnDPI to 2cd0479204301c50c6149706fcd4df3058b2a8cc
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'nDPId.c')
-rw-r--r-- | nDPId.c | 24 |
1 files changed, 18 insertions, 6 deletions
@@ -1244,6 +1244,7 @@ static struct nDPId_workflow * init_workflow(char const * const file_or_device) workflow->ndpi_struct = ndpi_init_detection_module(init_prefs); if (workflow->ndpi_struct == NULL) { + syslog(LOG_DAEMON | LOG_ERR, "%s", "BUG: Could not init ndpi detection module"); free_workflow(&workflow); return NULL; } @@ -1254,6 +1255,9 @@ static struct nDPId_workflow * init_workflow(char const * const file_or_device) workflow->ndpi_flows_active = (void **)ndpi_calloc(workflow->max_active_flows, sizeof(void *)); if (workflow->ndpi_flows_active == NULL) { + syslog(LOG_DAEMON | LOG_ERR, + "Could not allocate %llu bytes for (active) flow tracking", + workflow->max_active_flows * sizeof(void *)); free_workflow(&workflow); return NULL; } @@ -1263,6 +1267,9 @@ static struct nDPId_workflow * init_workflow(char const * const file_or_device) workflow->ndpi_flows_idle = (void **)ndpi_calloc(workflow->max_idle_flows, sizeof(void *)); if (workflow->ndpi_flows_idle == NULL) { + syslog(LOG_DAEMON | LOG_ERR, + "Could not allocate %llu bytes for (idle) flow tracking", + workflow->max_idle_flows * sizeof(void *)); free_workflow(&workflow); return NULL; } @@ -1291,8 +1298,12 @@ static struct nDPId_workflow * init_workflow(char const * const file_or_device) ndpi_set_detection_preferences(workflow->ndpi_struct, ndpi_pref_enable_tls_block_dissection, 1); if (ndpi_init_serializer_ll(&workflow->ndpi_serializer, ndpi_serialization_format_json, NETWORK_BUFFER_MAX_SIZE) != - 1) + 0) { + syslog(LOG_DAEMON | LOG_ERR, + "BUG: Could not init JSON serializer with buffer size: %u bytes", + NETWORK_BUFFER_MAX_SIZE); + free_workflow(&workflow); return NULL; } @@ -1541,8 +1552,7 @@ static int is_l4_protocol_timed_out(struct nDPId_workflow const * const workflow struct nDPId_flow_basic const * const flow_basic) { uint64_t sdiff = flow_basic->last_seen % nDPId_options.flow_scan_interval; - uint64_t itime = - get_l4_protocol_idle_time(flow_basic->l4_protocol) - sdiff; + uint64_t itime = get_l4_protocol_idle_time(flow_basic->l4_protocol) - sdiff; return (flow_basic->last_seen + itime <= workflow->last_time) || (flow_basic->tcp_fin_rst_seen == 1 && @@ -3076,16 +3086,18 @@ static void ndpi_process_packet(uint8_t * const args, flow_basic.src.v6.ip[1] = ip6->ip6_src.u6_addr.u6_addr64[1]; flow_basic.dst.v6.ip[0] = ip6->ip6_dst.u6_addr.u6_addr64[0]; flow_basic.dst.v6.ip[1] = ip6->ip6_dst.u6_addr.u6_addr64[1]; + uint64_t min_addr[2]; - if (flow_basic.src.v6.ip[0] > flow_basic.dst.v6.ip[0] && flow_basic.src.v6.ip[1] > flow_basic.dst.v6.ip[1]) + if (flow_basic.src.v6.ip[0] > flow_basic.dst.v6.ip[0] || + (flow_basic.src.v6.ip[0] == flow_basic.dst.v6.ip[0] && flow_basic.src.v6.ip[1] > flow_basic.dst.v6.ip[1])) { min_addr[0] = flow_basic.dst.v6.ip[0]; - min_addr[1] = flow_basic.dst.v6.ip[0]; + min_addr[1] = flow_basic.dst.v6.ip[1]; } else { min_addr[0] = flow_basic.src.v6.ip[0]; - min_addr[1] = flow_basic.src.v6.ip[0]; + min_addr[1] = flow_basic.src.v6.ip[1]; } thread_index = min_addr[0] + min_addr[1] + ip6->ip6_hdr.ip6_un1_nxt; } |