From: Ye Xiaolong <xiaolong.ye@intel.com>
To: Jeff Guo <jia.guo@intel.com>
Cc: beilei.xing@intel.com, qi.z.zhang@intel.com,
jingjing.wu@intel.com, qiming.yang@intel.com, dev@dpdk.org
Subject: Re: [dpdk-dev] net/iavf: fix invalid flow access
Date: Fri, 22 May 2020 17:12:42 +0800 [thread overview]
Message-ID: <20200522091242.GC82475@intel.com> (raw)
In-Reply-To: <20200522021151.55835-1-jia.guo@intel.com>
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 <jia.guo@intel.com>
>---
> 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.
prev parent reply other threads:[~2020-05-22 9:21 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-22 2:11 Jeff Guo
2020-05-22 3:43 ` Peng, Yuan
2020-05-22 7:43 ` Zhang, Qi Z
2020-05-22 9:12 ` Ye Xiaolong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200522091242.GC82475@intel.com \
--to=xiaolong.ye@intel.com \
--cc=beilei.xing@intel.com \
--cc=dev@dpdk.org \
--cc=jia.guo@intel.com \
--cc=jingjing.wu@intel.com \
--cc=qi.z.zhang@intel.com \
--cc=qiming.yang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).