From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6900FA0093; Fri, 22 May 2020 11:21:29 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 43AA21D93B; Fri, 22 May 2020 11:21:29 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 0391A1D930 for ; Fri, 22 May 2020 11:21:27 +0200 (CEST) IronPort-SDR: Wop8AlzS98I1cOTYvau2uOXsbWFN6e2pY9ZbJOC0EFobS/Wi+FI0R+c6ySKOC0MEZkr5L3C67/ sA8qMQvK4DnA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2020 02:21:26 -0700 IronPort-SDR: vn+gRMrGjuSoLcHFVGcWbGd5gGjH3w84f0HoNbZ8qWf90nc/MC7QVF+z7QDZX/c+wBeFbLFHHT QcyEHmExEzqA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,421,1583222400"; d="scan'208";a="255547941" Received: from yexl-server.sh.intel.com (HELO localhost) ([10.67.116.183]) by fmsmga008.fm.intel.com with ESMTP; 22 May 2020 02:21:24 -0700 Date: Fri, 22 May 2020 17:12:42 +0800 From: Ye Xiaolong To: Jeff Guo Cc: beilei.xing@intel.com, qi.z.zhang@intel.com, jingjing.wu@intel.com, qiming.yang@intel.com, dev@dpdk.org Message-ID: <20200522091242.GC82475@intel.com> References: <20200522021151.55835-1-jia.guo@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200522021151.55835-1-jia.guo@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [dpdk-dev] net/iavf: fix invalid flow access X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" On 05/21, Jeff Guo wrote: >When hash init, the default rss rules would be added, while hash uninit, >the default rss rules should be deleted. Add the missing part in the hash >uninit process. Also add invalid flow checking func in iavf generic flow >to avoid the error of "Cannot access memory at address 0xXXXXXX" occur. > >Fixes: 5ea614254332 ("net/iavf: fix VF reset for RSS") >Fixes: ff2d0c345c3b ("net/iavf: support generic flow API") > >Signed-off-by: Jeff Guo >--- > drivers/net/iavf/iavf_generic_flow.c | 24 ++++++++++++++++++++---- > drivers/net/iavf/iavf_hash.c | 12 ++++++++---- > 2 files changed, 28 insertions(+), 8 deletions(-) > >diff --git a/drivers/net/iavf/iavf_generic_flow.c b/drivers/net/iavf/iavf_generic_flow.c >index c0c67d0c7..b6c26c4fd 100644 >--- a/drivers/net/iavf/iavf_generic_flow.c >+++ b/drivers/net/iavf/iavf_generic_flow.c >@@ -935,6 +935,22 @@ iavf_flow_create(struct rte_eth_dev *dev, > return flow; > } > >+static bool >+iavf_flow_is_valid(struct rte_flow *flow) >+{ >+ struct iavf_flow_engine *engine; >+ void *temp; >+ >+ if (flow && flow->engine) { >+ TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { >+ if (engine == flow->engine) >+ return true; >+ } >+ } >+ >+ return false; >+} >+ > static int > iavf_flow_destroy(struct rte_eth_dev *dev, > struct rte_flow *flow, >@@ -945,10 +961,10 @@ iavf_flow_destroy(struct rte_eth_dev *dev, > struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad); > int ret = 0; > >- if (!flow || !flow->engine || !flow->engine->destroy) { >+ if (!iavf_flow_is_valid(flow) || !flow->engine->destroy) { > rte_flow_error_set(error, EINVAL, > RTE_FLOW_ERROR_TYPE_HANDLE, >- NULL, "Invalid flow"); >+ NULL, "Invalid flow destroy"); > return -rte_errno; > } > >@@ -1002,10 +1018,10 @@ iavf_flow_query(struct rte_eth_dev *dev, > IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > struct rte_flow_query_count *count = data; > >- if (!flow || !flow->engine || !flow->engine->query_count) { >+ if (!iavf_flow_is_valid(flow) || !flow->engine->query_count) { > rte_flow_error_set(error, EINVAL, > RTE_FLOW_ERROR_TYPE_HANDLE, >- NULL, "Invalid flow"); >+ NULL, "Invalid flow query"); > return -rte_errno; > } > >diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c >index 56ab170d8..af528863b 100644 >--- a/drivers/net/iavf/iavf_hash.c >+++ b/drivers/net/iavf/iavf_hash.c >@@ -887,7 +887,7 @@ static struct iavf_flow_parser iavf_hash_parser = { > }; > > static int >-iavf_hash_default_set(struct iavf_adapter *ad) >+iavf_hash_default_set(struct iavf_adapter *ad, bool add) > { > struct virtchnl_rss_cfg *rss_cfg; > uint16_t i; >@@ -902,9 +902,10 @@ iavf_hash_default_set(struct iavf_adapter *ad) > rss_cfg->proto_hdrs = *iavf_hash_default_hdrs[i]; > rss_cfg->rss_algorithm = VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC; > >- ret = iavf_add_del_rss_cfg(ad, rss_cfg, true); >+ ret = iavf_add_del_rss_cfg(ad, rss_cfg, add); > if (ret) { >- PMD_DRV_LOG(ERR, "fail to add RSS configure"); >+ PMD_DRV_LOG(ERR, "fail to %s RSS configure", >+ add ? "add" : "delete"); > rte_free(rss_cfg); > return ret; > } >@@ -941,7 +942,7 @@ iavf_hash_init(struct iavf_adapter *ad) > return ret; > } > >- ret = iavf_hash_default_set(ad); >+ ret = iavf_hash_default_set(ad, true); > if (ret) { > PMD_DRV_LOG(ERR, "fail to set default RSS"); > iavf_unregister_parser(parser, ad); >@@ -1222,6 +1223,9 @@ iavf_hash_destroy(__rte_unused struct iavf_adapter *ad, > static void > iavf_hash_uninit(struct iavf_adapter *ad) > { >+ if (iavf_hash_default_set(ad, false)) >+ PMD_DRV_LOG(ERR, "fail to delete default RSS"); >+ > iavf_unregister_parser(&iavf_hash_parser, ad); > } > >-- >2.20.1 > Applied to dpdk-next-net-intel, Thanks.