This patch adds check for L4 header size for avx512
implementation of the ipv4 action.

Fixes: 92eb03f7b03a ("odp-execute: Add ISA implementation of set_masked IPv4 
action")
Signed-off-by: Emma Finn <[email protected]>
---
 lib/odp-execute-avx512.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/odp-execute-avx512.c b/lib/odp-execute-avx512.c
index ac5c1c63d..c28461ec1 100644
--- a/lib/odp-execute-avx512.c
+++ b/lib/odp-execute-avx512.c
@@ -477,8 +477,9 @@ action_avx512_ipv4_set_addrs(struct dp_packet_batch *batch,
 
             uint16_t delta_checksum = avx512_ipv4_addr_csum_delta(v_packet,
                                                                   v_new_hdr);
+            size_t l4_size = dp_packet_l4_size(packet);
 
-            if (nh->ip_proto == IPPROTO_UDP) {
+            if (nh->ip_proto == IPPROTO_UDP && l4_size >= UDP_HEADER_LEN) {
                 /* New UDP checksum. */
                 struct udp_header *uh = dp_packet_l4(packet);
                 if (uh->udp_csum) {
@@ -492,7 +493,8 @@ action_avx512_ipv4_set_addrs(struct dp_packet_batch *batch,
                     /* Insert new udp checksum. */
                     uh->udp_csum = udp_checksum;
                 }
-            } else if (nh->ip_proto == IPPROTO_TCP) {
+            } else if (nh->ip_proto == IPPROTO_TCP &&
+                       l4_size >= TCP_HEADER_LEN) {
                 /* New TCP checksum. */
                 struct tcp_header *th = dp_packet_l4(packet);
                 uint16_t old_tcp_checksum = ~th->tcp_csum;
-- 
2.25.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to