ethernet: fix coverity 214973 99/36999/3
authorAndrew Yourtchenko <ayourtch@gmail.com>
Tue, 23 Aug 2022 15:48:59 +0000 (15:48 +0000)
committerDamjan Marion <dmarion@0xa5.net>
Tue, 30 Aug 2022 14:41:51 +0000 (14:41 +0000)
Ensure that the ethernet_input_inline_dmac_check which directly derefererences ei,
is called only if ei is set.

Type: fix
Change-Id: I2d3bce63ee457825a5d375a6102225f3abf67703
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
src/vnet/ethernet/node.c

index c1a8e0d..4ef575a 100644 (file)
@@ -1563,21 +1563,20 @@ ethernet_input_inline (vlib_main_t * vm,
 
                  dmacs[0] = *(u64 *) e0;
 
-                 if (ei && vec_len (ei->secondary_addrs))
-                   ethernet_input_inline_dmac_check (hi, dmacs,
-                                                     dmacs_bad,
-                                                     1 /* n_packets */ ,
-                                                     ei,
-                                                     1 /* have_sec_dmac */ );
-                 else
-                   ethernet_input_inline_dmac_check (hi, dmacs,
-                                                     dmacs_bad,
-                                                     1 /* n_packets */ ,
-                                                     ei,
-                                                     0 /* have_sec_dmac */ );
-
-                 if (dmacs_bad[0])
-                   error0 = ETHERNET_ERROR_L3_MAC_MISMATCH;
+                 if (ei)
+                   {
+                     if (vec_len (ei->secondary_addrs))
+                       ethernet_input_inline_dmac_check (
+                         hi, dmacs, dmacs_bad, 1 /* n_packets */, ei,
+                         1 /* have_sec_dmac */);
+                     else
+                       ethernet_input_inline_dmac_check (
+                         hi, dmacs, dmacs_bad, 1 /* n_packets */, ei,
+                         0 /* have_sec_dmac */);
+
+                     if (dmacs_bad[0])
+                       error0 = ETHERNET_ERROR_L3_MAC_MISMATCH;
+                   }
 
                skip_dmac_check0:
                  vlib_buffer_advance (b0, sizeof (ethernet_header_t));