From 470901dc58f2c82c24abb8c9e82fc40f503c50db Mon Sep 17 00:00:00 2001 From: theirix Date: Mon, 25 Jul 2016 15:23:44 +0300 Subject: Fixed overflow in Oscar --- src/lib/protocols/oscar.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib/protocols/oscar.c b/src/lib/protocols/oscar.c index 8be944993..2262a30d5 100644 --- a/src/lib/protocols/oscar.c +++ b/src/lib/protocols/oscar.c @@ -244,7 +244,10 @@ static void ndpi_search_oscar_tcp_connect(struct ndpi_detection_module_struct */ if (channel == DATA) { - family = get_u_int16_t(packet->payload, 6); + if (packet->payload_packet_len >= 8) + family = get_u_int16_t(packet->payload, 6); + else + family = 0; if (packet->payload_packet_len >= 10) type = get_u_int16_t(packet->payload, 8); else -- cgit v1.2.3 From 01ac65eee4582c6781ac08eec7e6ef079f1fde5f Mon Sep 17 00:00:00 2001 From: theirix Date: Mon, 25 Jul 2016 17:02:39 +0300 Subject: Fail fast when Oscar family cannot be detected --- src/lib/protocols/oscar.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib/protocols/oscar.c b/src/lib/protocols/oscar.c index 2262a30d5..3bbf23354 100644 --- a/src/lib/protocols/oscar.c +++ b/src/lib/protocols/oscar.c @@ -245,9 +245,14 @@ static void ndpi_search_oscar_tcp_connect(struct ndpi_detection_module_struct if (channel == DATA) { if (packet->payload_packet_len >= 8) + { family = get_u_int16_t(packet->payload, 6); + } else - family = 0; + { + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_OSCAR); + return; + } if (packet->payload_packet_len >= 10) type = get_u_int16_t(packet->payload, 8); else -- cgit v1.2.3 From 3e5033ff13225743ee29e5f899f1f72710a04dda Mon Sep 17 00:00:00 2001 From: theirix Date: Mon, 25 Jul 2016 17:44:38 +0300 Subject: Fail when Oscar family is 0 --- src/lib/protocols/oscar.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib/protocols/oscar.c b/src/lib/protocols/oscar.c index 3bbf23354..5cd657c22 100644 --- a/src/lib/protocols/oscar.c +++ b/src/lib/protocols/oscar.c @@ -245,10 +245,10 @@ static void ndpi_search_oscar_tcp_connect(struct ndpi_detection_module_struct if (channel == DATA) { if (packet->payload_packet_len >= 8) - { family = get_u_int16_t(packet->payload, 6); - } else + family = 0; + if (family == 0) { NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_OSCAR); return; -- cgit v1.2.3 From 384dee1f954e0f425fdba2e05c0642176e85592b Mon Sep 17 00:00:00 2001 From: theirix Date: Mon, 25 Jul 2016 18:24:45 +0300 Subject: Fail when Oscar family or type is 0 --- src/lib/protocols/oscar.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/lib/protocols/oscar.c b/src/lib/protocols/oscar.c index 5cd657c22..869b36378 100644 --- a/src/lib/protocols/oscar.c +++ b/src/lib/protocols/oscar.c @@ -248,15 +248,15 @@ static void ndpi_search_oscar_tcp_connect(struct ndpi_detection_module_struct family = get_u_int16_t(packet->payload, 6); else family = 0; - if (family == 0) - { - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_OSCAR); - return; - } if (packet->payload_packet_len >= 10) type = get_u_int16_t(packet->payload, 8); else type = 0; + if (family == 0 || type == 0) + { + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_OSCAR); + return; + } /* Family 0x0001 */ if (family == htons(GE_SE_CTL)) -- cgit v1.2.3