]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
decode/udp: fix payload_len calculation
authorShivani Bhardwaj <shivani@oisf.net>
Wed, 4 Jan 2023 06:30:13 +0000 (12:00 +0530)
committerVictor Julien <vjulien@oisf.net>
Mon, 30 Jan 2023 12:48:11 +0000 (13:48 +0100)
Fix payload_len calculation post removal of the condition that returned
error code if the length to the decode fn did not match the length of
header from the UDP packet.

Bug 5379

(cherry picked from commit f941ceae2be883596a3571ec9046ea884d3f3f85)

src/decode-udp.c

index 2464364e64602090f49d01f8282bfb5c60b2c1dd..7fe10af40caafd69d18b2a2ad9cf5b8df82220f3 100644 (file)
@@ -60,12 +60,16 @@ static int DecodeUDPPacket(ThreadVars *t, Packet *p, const uint8_t *pkt, uint16_
         // packet can still be valid, keeping for consistency with decoder.udp.hlen_invalid event
         ENGINE_SET_INVALID_EVENT(p, UDP_HLEN_INVALID);
     }
+    if (unlikely(UDP_GET_LEN(p) < UDP_HEADER_LEN)) {
+        ENGINE_SET_INVALID_EVENT(p, UDP_LEN_INVALID);
+        return -1;
+    }
 
     SET_UDP_SRC_PORT(p,&p->sp);
     SET_UDP_DST_PORT(p,&p->dp);
 
     p->payload = (uint8_t *)pkt + UDP_HEADER_LEN;
-    p->payload_len = len - UDP_HEADER_LEN;
+    p->payload_len = UDP_GET_LEN(p) - UDP_HEADER_LEN;
 
     p->proto = IPPROTO_UDP;