Hi, xiaoyun,

在 2021/4/21 11:31, Li, Xiaoyun 写道:
Hi

-----Original Message-----
From: Min Hu (Connor) <humi...@huawei.com>
Sent: Wednesday, April 21, 2021 10:08
To: dev@dpdk.org
Cc: Yigit, Ferruh <ferruh.yi...@intel.com>; Li, Xiaoyun <xiaoyun...@intel.com>;
Wu, Jingjing <jingjing...@intel.com>
Subject: [PATCH 1/2] raw/ntb: check spad user index

From: Chengwen Feng <fengcheng...@huawei.com>

This patch adds checking spad user index validity when set or get attr.

Fixes: 277310027965 ("raw/ntb: introduce NTB raw device driver")
Cc: sta...@dpdk.org

Signed-off-by: Chengwen Feng <fengcheng...@huawei.com>
Signed-off-by: Min Hu (Connor) <humi...@huawei.com>
---
  drivers/raw/ntb/ntb.c | 8 ++++++++
  1 file changed, 8 insertions(+)

diff --git a/drivers/raw/ntb/ntb.c b/drivers/raw/ntb/ntb.c index
6dd213e..0f0e3f2 100644
--- a/drivers/raw/ntb/ntb.c
+++ b/drivers/raw/ntb/ntb.c
@@ -1080,6 +1080,10 @@ ntb_attr_set(struct rte_rawdev *dev, const char
*attr_name,
                if (hw->ntb_ops->spad_write == NULL)
                        return -ENOTSUP;
                index = atoi(&attr_name[NTB_SPAD_USER_LEN]);
+               if (index < 0 || index >= NTB_SPAD_USER_MAX_NUM) {
+                       NTB_LOG(ERR, "Invalid attribute (%s)", attr_name);
+                       return -EINVAL;
+               }

It's unnecessary. The value will be checked in intel_ntb_spad_write(). There 
will be error remind in that.

Nothing to do with intel_ntb_spad_write. If index is no checked,
hw->spad_user_list[index] may be be out of memory and result in
segmentation default.

        
                (*hw->ntb_ops->spad_write)(dev, hw->spad_user_list[index],
                                           1, attr_value);
                NTB_LOG(DEBUG, "Set attribute (%s) Value (%" PRIu64 ")", @@
-1174,6 +1178,10 @@ ntb_attr_get(struct rte_rawdev *dev, const char
*attr_name,
                if (hw->ntb_ops->spad_read == NULL)
                        return -ENOTSUP;
                index = atoi(&attr_name[NTB_SPAD_USER_LEN]);
+               if (index < 0 || index >= NTB_SPAD_USER_MAX_NUM) {
+                       NTB_LOG(ERR, "Attribute (%s) out of range",
attr_name);
+                       return -EINVAL;
+               }

Same as above.

                *attr_value = (*hw->ntb_ops->spad_read)(dev,
                                hw->spad_user_list[index], 0);
                NTB_LOG(DEBUG, "Attribute (%s) Value (%" PRIu64 ")",
--
2.7.4

.

Reply via email to