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