diff options
author | Luca Deri <lucaderi@users.noreply.github.com> | 2020-03-31 17:51:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-31 17:51:20 +0200 |
commit | 56ca71bda9870e78ba0ee70fe226c4a4fcc36a04 (patch) | |
tree | a523d39c9ee5faa35067fc8a4122ba2b6f51883c /src/lib/protocols/kerberos.c | |
parent | 17d531e3db61326f286c7d0d543f4ea5b00bc796 (diff) | |
parent | 498571354d2c22c192bb80bc79058b70d455b363 (diff) |
Merge pull request #863 from IvanNardi/memory-errors
Memory errors
Diffstat (limited to 'src/lib/protocols/kerberos.c')
-rw-r--r-- | src/lib/protocols/kerberos.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/lib/protocols/kerberos.c b/src/lib/protocols/kerberos.c index 2bacbf510..2aa73dd39 100644 --- a/src/lib/protocols/kerberos.c +++ b/src/lib/protocols/kerberos.c @@ -45,6 +45,8 @@ void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_packet_struct *packet = &flow->packet; u_int16_t sport = packet->tcp ? ntohs(packet->tcp->source) : ntohs(packet->udp->source); u_int16_t dport = packet->tcp ? ntohs(packet->tcp->dest) : ntohs(packet->udp->dest); + const u_int8_t *original_packet_payload = NULL; + u_int16_t original_payload_packet_len = 0; if((sport != KERBEROS_PORT) && (dport != KERBEROS_PORT)) { NDPI_EXCLUDE_PROTO(ndpi_struct, flow); @@ -65,6 +67,8 @@ void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct, flow->kerberos_buf.pktbuf_currlen += packet->payload_packet_len; if(flow->kerberos_buf.pktbuf_currlen == flow->kerberos_buf.pktbuf_maxlen) { + original_packet_payload = packet->payload; + original_payload_packet_len = packet->payload_packet_len; packet->payload = (u_int8_t *)flow->kerberos_buf.pktbuf; packet->payload_packet_len = flow->kerberos_buf.pktbuf_currlen; #ifdef KERBEROS_DEBUG @@ -319,8 +323,11 @@ void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct, snprintf(flow->protos.kerberos.domain, sizeof(flow->protos.kerberos.domain), "%s", realm_str); /* If necessary we can decode sname */ - - if(flow->kerberos_buf.pktbuf) ndpi_free(flow->kerberos_buf.pktbuf); + if(flow->kerberos_buf.pktbuf) { + ndpi_free(flow->kerberos_buf.pktbuf); + packet->payload = original_packet_payload; + packet->payload_packet_len = original_payload_packet_len; + } flow->kerberos_buf.pktbuf = NULL; } } @@ -332,6 +339,8 @@ void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct, /* We set the protocol in the response */ if(flow->kerberos_buf.pktbuf != NULL) { ndpi_free(flow->kerberos_buf.pktbuf); + packet->payload = original_packet_payload; + packet->payload_packet_len = original_payload_packet_len; flow->kerberos_buf.pktbuf = NULL; } |