From patchwork Fri Feb 26 14:10:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 88265 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9F437A034F; Fri, 26 Feb 2021 15:10:49 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1D0C4407FF; Fri, 26 Feb 2021 15:10:49 +0100 (CET) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 3EFD640692; Fri, 26 Feb 2021 15:10:48 +0100 (CET) Received: from localhost.localdomain (unknown [188.242.7.54]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 871757F529; Fri, 26 Feb 2021 17:10:47 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 871757F529 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1614348647; bh=ilpp+0gSv9NttbA2TktSx79FPpoLNv0azNfOKvGo8+E=; h=From:To:Cc:Subject:Date; b=buw1B7WqUMpBHBL5VHrPRP6GHFmTD6nVkSgDe/d1Eoox9hvuE7YCDA7F55+yhIeAl 8MBfGeF1QvxnwNO2qllTykEzhysoxRG7jK92+StZeb2tUS4g8/oyY2wZhMYclpg519 Pr6rzwAJwxgcmOOJy+oIRM+N/dRoo423AR2rLXUM= From: Ivan Malov To: dev@dpdk.org Cc: stable@dpdk.org, Andrew Rybchenko , Andy Moreton Date: Fri, 26 Feb 2021 17:10:23 +0300 Message-Id: <20210226141023.5178-1-ivan.malov@oktetlabs.ru> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH] net/sfc: fix passing wrong buffer size X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- 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;