Pass the size of the buffer where the item's mask
is stored and not the indirection pointer size.

Coverity issue: 363735
Fixes: dadff137931c ("net/sfc: support encap flow items in transfer rules")
Cc: sta...@dpdk.org

Signed-off-by: Ivan Malov <ivan.ma...@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru>
Reviewed-by: Andy Moreton <amore...@xilinx.com>
---
 drivers/net/sfc/sfc_mae.c | 20 +++++++++-----------
 drivers/net/sfc/sfc_mae.h |  3 ++-
 2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index 7deccc9c60..7189a34140 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -1696,7 +1696,6 @@ sfc_mae_rule_parse_item_tunnel(const struct rte_flow_item 
*item,
        uint8_t supp_mask[sizeof(uint64_t)];
        const uint8_t *spec = NULL;
        const uint8_t *mask = NULL;
-       const void *def_mask;
        int rc;
 
        /*
@@ -1718,12 +1717,11 @@ sfc_mae_rule_parse_item_tunnel(const struct 
rte_flow_item *item,
         * sfc_mae_rule_encap_parse_init(). Default mask
         * was also picked by that helper. Use it here.
         */
-       def_mask = ctx_mae->tunnel_def_mask;
-
        rc = sfc_flow_parse_init(item,
                                 (const void **)&spec, (const void **)&mask,
-                                (const void *)&supp_mask, def_mask,
-                                sizeof(def_mask), error);
+                                (const void *)&supp_mask,
+                                ctx_mae->tunnel_def_mask,
+                                ctx_mae->tunnel_def_mask_size,  error);
        if (rc != 0)
                return rc;
 
@@ -1957,20 +1955,20 @@ sfc_mae_rule_encap_parse_init(struct sfc_adapter *sa,
                case RTE_FLOW_ITEM_TYPE_VXLAN:
                        ctx->encap_type = EFX_TUNNEL_PROTOCOL_VXLAN;
                        ctx->tunnel_def_mask = &rte_flow_item_vxlan_mask;
-                       RTE_BUILD_BUG_ON(sizeof(ctx->tunnel_def_mask) !=
-                                        sizeof(rte_flow_item_vxlan_mask));
+                       ctx->tunnel_def_mask_size =
+                               sizeof(rte_flow_item_vxlan_mask);
                        break;
                case RTE_FLOW_ITEM_TYPE_GENEVE:
                        ctx->encap_type = EFX_TUNNEL_PROTOCOL_GENEVE;
                        ctx->tunnel_def_mask = &rte_flow_item_geneve_mask;
-                       RTE_BUILD_BUG_ON(sizeof(ctx->tunnel_def_mask) !=
-                                        sizeof(rte_flow_item_geneve_mask));
+                       ctx->tunnel_def_mask_size =
+                               sizeof(rte_flow_item_geneve_mask);
                        break;
                case RTE_FLOW_ITEM_TYPE_NVGRE:
                        ctx->encap_type = EFX_TUNNEL_PROTOCOL_NVGRE;
                        ctx->tunnel_def_mask = &rte_flow_item_nvgre_mask;
-                       RTE_BUILD_BUG_ON(sizeof(ctx->tunnel_def_mask) !=
-                                        sizeof(rte_flow_item_nvgre_mask));
+                       ctx->tunnel_def_mask_size =
+                               sizeof(rte_flow_item_nvgre_mask);
                        break;
                case RTE_FLOW_ITEM_TYPE_END:
                        break;
diff --git a/drivers/net/sfc/sfc_mae.h b/drivers/net/sfc/sfc_mae.h
index 2822afce31..cbe4fd8e9f 100644
--- a/drivers/net/sfc/sfc_mae.h
+++ b/drivers/net/sfc/sfc_mae.h
@@ -274,7 +274,8 @@ struct sfc_mae_parse_ctx {
         * which part of the pattern is being parsed.
         */
        const efx_mae_field_id_t        *field_ids_remap;
-       /* This points to a tunnel-specific default mask. */
+       /* These two fields correspond to the tunnel-specific default mask. */
+       size_t                          tunnel_def_mask_size;
        const void                      *tunnel_def_mask;
        bool                            match_mport_set;
        struct sfc_mae_pattern_data     pattern_data;
-- 
2.20.1

Reply via email to