From: Ivan Malov Date: Fri, 26 Feb 2021 14:10:23 +0000 (+0300) Subject: net/sfc: fix buffer size for flow parse X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=05cc6e33961b41df6cdc37fd429e06c28c78a84e;p=dpdk.git net/sfc: fix buffer size for flow parse 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: stable@dpdk.org Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c index 4ddfef5563..15c5c39758 100644 --- a/drivers/net/sfc/sfc_mae.c +++ b/drivers/net/sfc/sfc_mae.c @@ -1395,7 +1395,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; /* @@ -1417,12 +1416,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; @@ -1656,20 +1654,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 53ddead979..bf432638c1 100644 --- a/drivers/net/sfc/sfc_mae.h +++ b/drivers/net/sfc/sfc_mae.h @@ -179,7 +179,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;