hikptool/0067-hikptool-roce-Add-check-for-total_block_num-from-FW.patch
zhangyuyang 9266dc4f4d hikptool: Modify the review comments to increase the reliability of the code
Synchronize code, Modify the review comments to increase the reliability of the code

Signed-off-by: veega2022 <zhuweijia@huawei.com>
(cherry picked from commit d2a23f9ffed0201385c7864b9cd58312fb395cb6)
2024-11-26 16:32:40 +08:00

71 lines
2.8 KiB
Diff

From 31b9eb2f181ff9275ccbba787a8c1f991a70f69d Mon Sep 17 00:00:00 2001
From: Junxian Huang <huangjunxian6@hisilicon.com>
Date: Mon, 5 Aug 2024 19:59:19 +0800
Subject: [PATCH 05/27] hikptool/roce: Add check for total_block_num from FW
total_block_num is used to allocate memory for register array.
Check whether it is 0 to prevent calloc() error.
Fixes: 8b3b68347165 ("hikptool/roce: Add a common frame for hikptool roce register query")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
net/roce/roce_ext_common/hikp_roce_ext_common.c | 6 ++++++
net/roce/roce_scc/hikp_roce_scc.c | 6 ++++++
net/roce/roce_trp/hikp_roce_trp.c | 6 ++++++
3 files changed, 18 insertions(+)
diff --git a/net/roce/roce_ext_common/hikp_roce_ext_common.c b/net/roce/roce_ext_common/hikp_roce_ext_common.c
index 049b64a..bc3b883 100644
--- a/net/roce/roce_ext_common/hikp_roce_ext_common.c
+++ b/net/roce/roce_ext_common/hikp_roce_ext_common.c
@@ -122,6 +122,12 @@ static int hikp_roce_ext_get_res(enum roce_cmd_type cmd_type,
if (block_id == 0) {
res_head->total_block_num = roce_ext_res->head.total_block_num;
+ if (!res_head->total_block_num) {
+ printf("hikptool roce_%s total_block_num error!\n",
+ cmd_name);
+ ret = -EINVAL;
+ goto get_data_error;
+ }
reg->offset = (uint32_t *)calloc(res_head->total_block_num, sizeof(uint32_t));
reg->data = (uint32_t *)calloc(res_head->total_block_num, sizeof(uint32_t));
if ((reg->offset == NULL) || (reg->data == NULL)) {
diff --git a/net/roce/roce_scc/hikp_roce_scc.c b/net/roce/roce_scc/hikp_roce_scc.c
index 76c0ca6..0ecb8cf 100644
--- a/net/roce/roce_scc/hikp_roce_scc.c
+++ b/net/roce/roce_scc/hikp_roce_scc.c
@@ -146,6 +146,12 @@ static int hikp_roce_scc_get_total_data_num(struct roce_scc_head *res_head,
}
roce_scc_res = (struct roce_scc_res_param *)cmd_ret->rsp_data;
+ if (!roce_scc_res->head.total_block_num) {
+ printf("hikptool roce_scc total_block_num error!\n");
+ ret = -EINVAL;
+ goto get_data_error;
+ }
+
max_size = roce_scc_res->head.total_block_num * sizeof(uint32_t);
*offset = (uint32_t *)calloc(1, max_size);
*data = (uint32_t *)calloc(1, max_size);
diff --git a/net/roce/roce_trp/hikp_roce_trp.c b/net/roce/roce_trp/hikp_roce_trp.c
index 61f0511..486bbe3 100644
--- a/net/roce/roce_trp/hikp_roce_trp.c
+++ b/net/roce/roce_trp/hikp_roce_trp.c
@@ -166,6 +166,12 @@ static int hikp_roce_trp_get_total_data_num(struct roce_trp_head *res_head,
}
roce_trp_res = (struct roce_trp_res_param *)cmd_ret->rsp_data;
+ if (!roce_trp_res->head.total_block_num) {
+ printf("hikptool roce_trp total_block_num error!\n");
+ ret = -EINVAL;
+ goto get_data_error;
+ }
+
max_size = roce_trp_res->head.total_block_num * sizeof(uint32_t);
*offset = (uint32_t *)calloc(1, max_size);
*data = (uint32_t *)calloc(1, max_size);
--
2.45.0.windows.1