]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
enip: harden byte parsing code
authorVictor Julien <victor@inliniac.net>
Thu, 19 Apr 2018 12:55:01 +0000 (14:55 +0200)
committerVictor Julien <victor@inliniac.net>
Mon, 16 Jul 2018 11:30:50 +0000 (13:30 +0200)
Make sure we never read more than we have.

Reported-by: Henning Perl
src/app-layer-enip-common.c

index 844a5c91ac3e1a8cb9fa5e87c4e7983b80d35c6a..2002e39bbfa2baff145213851160b221ebba08b9 100644 (file)
@@ -44,7 +44,7 @@
 static int ENIPExtractUint8(uint8_t *res, uint8_t *input, uint16_t *offset, uint32_t input_len)
 {
 
-    if (*offset > (input_len - sizeof(uint8_t)))
+    if (input_len < sizeof(uint8_t) || *offset > (input_len - sizeof(uint8_t)))
     {
         SCLogDebug("ENIPExtractUint8: Parsing beyond payload length");
         return 0;
@@ -64,7 +64,7 @@ static int ENIPExtractUint8(uint8_t *res, uint8_t *input, uint16_t *offset, uint
 static int ENIPExtractUint16(uint16_t *res, uint8_t *input, uint16_t *offset, uint32_t input_len)
 {
 
-    if (*offset > (input_len - sizeof(uint16_t)))
+    if (input_len < sizeof(uint16_t) || *offset > (input_len - sizeof(uint16_t)))
     {
         SCLogDebug("ENIPExtractUint16: Parsing beyond payload length");
         return 0;
@@ -85,7 +85,7 @@ static int ENIPExtractUint16(uint16_t *res, uint8_t *input, uint16_t *offset, ui
 static int ENIPExtractUint32(uint32_t *res, uint8_t *input, uint16_t *offset, uint32_t input_len)
 {
 
-    if (*offset > (input_len - sizeof(uint32_t)))
+    if (input_len < sizeof(uint32_t) || *offset > (input_len - sizeof(uint32_t)))
     {
         SCLogDebug("ENIPExtractUint32: Parsing beyond payload length");
         return 0;
@@ -106,7 +106,7 @@ static int ENIPExtractUint32(uint32_t *res, uint8_t *input, uint16_t *offset, ui
 static int ENIPExtractUint64(uint64_t *res, uint8_t *input, uint16_t *offset, uint32_t input_len)
 {
 
-    if (*offset > (input_len - sizeof(uint64_t)))
+    if (input_len < sizeof(uint64_t) || *offset > (input_len - sizeof(uint64_t)))
     {
         SCLogDebug("ENIPExtractUint64: Parsing beyond payload length");
         return 0;