提交 f2663cc8 编写于 作者: X Xue 提交者: Xie XiuQi

net: hinic: static check warnings fix

driver inclusion
category:bugfix
bugzilla:4472
CVE:NA

-----------------------------------------------------------------------

This patch fixes static check warnings, mainly adding parameter checks.
Reviewed-by: NChiQijun <chiqijun@huawei.com>
Signed-off-by: NXue <xuechaojing@huawei.com>
Reviewed-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 339f5888
...@@ -228,7 +228,7 @@ int hinic_dbg_get_rq_wqe_info(void *hwdev, u16 q_id, u16 idx, u16 wqebb_cnt, ...@@ -228,7 +228,7 @@ int hinic_dbg_get_rq_wqe_info(void *hwdev, u16 q_id, u16 idx, u16 wqebb_cnt,
int hinic_dbg_get_hw_stats(const void *hwdev, u8 *hw_stats, u16 *out_size) int hinic_dbg_get_hw_stats(const void *hwdev, u8 *hw_stats, u16 *out_size)
{ {
if (*out_size != sizeof(struct hinic_hw_stats)) { if (!hw_stats || *out_size != sizeof(struct hinic_hw_stats)) {
pr_err("Unexpect out buf size from user :%d, expect: %lu\n", pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(struct hinic_hw_stats)); *out_size, sizeof(struct hinic_hw_stats));
return -EFAULT; return -EFAULT;
...@@ -253,6 +253,12 @@ void hinic_get_chip_fault_stats(const void *hwdev, ...@@ -253,6 +253,12 @@ void hinic_get_chip_fault_stats(const void *hwdev,
{ {
int copy_len = offset + MAX_DRV_BUF_SIZE - HINIC_CHIP_FAULT_SIZE; int copy_len = offset + MAX_DRV_BUF_SIZE - HINIC_CHIP_FAULT_SIZE;
if (offset < 0 || offset > HINIC_CHIP_FAULT_SIZE) {
pr_err("offset %d greater than chip fault max size\n",
offset);
return;
}
if (offset + MAX_DRV_BUF_SIZE <= HINIC_CHIP_FAULT_SIZE) if (offset + MAX_DRV_BUF_SIZE <= HINIC_CHIP_FAULT_SIZE)
memcpy(chip_fault_stats, memcpy(chip_fault_stats,
((struct hinic_hwdev *)hwdev)->chip_fault_stats + offset, ((struct hinic_hwdev *)hwdev)->chip_fault_stats + offset,
......
...@@ -205,7 +205,7 @@ static int get_tx_info(struct hinic_nic_dev *nic_dev, void *buf_in, u32 in_size, ...@@ -205,7 +205,7 @@ static int get_tx_info(struct hinic_nic_dev *nic_dev, void *buf_in, u32 in_size,
return -EFAULT; return -EFAULT;
} }
if (!buf_in || !buf_out) if (!buf_in || !buf_out || in_size != sizeof(int))
return -EINVAL; return -EINVAL;
q_id = *((u16 *)buf_in); q_id = *((u16 *)buf_in);
...@@ -259,7 +259,7 @@ static int get_tx_wqe_info(struct hinic_nic_dev *nic_dev, ...@@ -259,7 +259,7 @@ static int get_tx_wqe_info(struct hinic_nic_dev *nic_dev,
return -EFAULT; return -EFAULT;
} }
if (!info || !buf_out) if (!info || !buf_out || in_size != sizeof(*info))
return -EFAULT; return -EFAULT;
/* TODO: change the type of info->q_id */ /* TODO: change the type of info->q_id */
...@@ -285,7 +285,7 @@ static int get_rx_info(struct hinic_nic_dev *nic_dev, void *buf_in, u32 in_size, ...@@ -285,7 +285,7 @@ static int get_rx_info(struct hinic_nic_dev *nic_dev, void *buf_in, u32 in_size,
return -EFAULT; return -EFAULT;
} }
if (!buf_in || !buf_out) if (!buf_in || !buf_out || in_size != sizeof(int))
return -EINVAL; return -EINVAL;
q_id = *((u16 *)buf_in); q_id = *((u16 *)buf_in);
...@@ -316,7 +316,7 @@ static int get_rx_wqe_info(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -316,7 +316,7 @@ static int get_rx_wqe_info(struct hinic_nic_dev *nic_dev, void *buf_in,
return -EFAULT; return -EFAULT;
} }
if (!info || !buf_out) if (!info || !buf_out || in_size != sizeof(*info))
return -EFAULT; return -EFAULT;
q_id = (u16)info->q_id; q_id = (u16)info->q_id;
...@@ -417,7 +417,7 @@ static int set_dcb_cos_up_map(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -417,7 +417,7 @@ static int set_dcb_cos_up_map(struct hinic_nic_dev *nic_dev, void *buf_in,
{ {
struct hinic_cos_up_map *map = buf_in; struct hinic_cos_up_map *map = buf_in;
if (!buf_in || !out_size) if (!buf_in || !out_size || in_size != sizeof(*map))
return -EINVAL; return -EINVAL;
*out_size = sizeof(*map); *out_size = sizeof(*map);
...@@ -438,7 +438,7 @@ static int get_rx_cqe_info(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -438,7 +438,7 @@ static int get_rx_cqe_info(struct hinic_nic_dev *nic_dev, void *buf_in,
return -EFAULT; return -EFAULT;
} }
if (!info || !buf_out) if (!info || !buf_out || in_size != sizeof(*info))
return -EFAULT; return -EFAULT;
if (*out_size != sizeof(struct hinic_rq_cqe)) { if (*out_size != sizeof(struct hinic_rq_cqe)) {
...@@ -605,7 +605,7 @@ static int set_loopback_mode(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -605,7 +605,7 @@ static int set_loopback_mode(struct hinic_nic_dev *nic_dev, void *buf_in,
return -EFAULT; return -EFAULT;
} }
if (!mode || !out_size) if (!mode || !out_size || in_size != sizeof(*mode))
return -EFAULT; return -EFAULT;
err = hinic_set_loopback_mode_ex(nic_dev->hwdev, mode->loop_mode, err = hinic_set_loopback_mode_ex(nic_dev->hwdev, mode->loop_mode,
...@@ -629,7 +629,7 @@ static int set_link_mode(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -629,7 +629,7 @@ static int set_link_mode(struct hinic_nic_dev *nic_dev, void *buf_in,
return -EFAULT; return -EFAULT;
} }
if (!link || !out_size) if (!link || !out_size || in_size != sizeof(*link))
return -EFAULT; return -EFAULT;
switch (*link) { switch (*link) {
...@@ -662,19 +662,20 @@ static int set_link_mode(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -662,19 +662,20 @@ static int set_link_mode(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
static int set_dcb_cfg(struct hinic_nic_dev *nic_dev, void *buf_in, static int set_dcb_cfg(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
union _dcb_ctl dcb_ctl = {.data = 0}; union _dcb_ctl dcb_ctl = {.data = 0};
int err; int err;
if (!buf_in || !buf_out || !out_size) if (!buf_in || !buf_out || *out_size != sizeof(u32) ||
in_size != sizeof(u32))
return -EINVAL; return -EINVAL;
dcb_ctl.data = *((u32 *)buf_in); dcb_ctl.data = *((u32 *)buf_in);
err = hinic_setup_dcb_tool(nic_dev->netdev, err = hinic_setup_dcb_tool(nic_dev->netdev,
&dcb_ctl.dcb_data.dcb_en, &dcb_ctl.dcb_data.dcb_en,
!!dcb_ctl.dcb_data.wr_flag); !!dcb_ctl.dcb_data.wr_flag);
if (err) { if (err) {
nicif_err(nic_dev, drv, nic_dev->netdev, nicif_err(nic_dev, drv, nic_dev->netdev,
"Failed to setup dcb state to %d\n", "Failed to setup dcb state to %d\n",
...@@ -689,11 +690,12 @@ static int set_dcb_cfg(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -689,11 +690,12 @@ static int set_dcb_cfg(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
int get_pfc_info(struct hinic_nic_dev *nic_dev, void *buf_in, int get_pfc_info(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
union _pfc pfc = {.data = 0}; union _pfc pfc = {.data = 0};
if (!buf_in || !buf_out || !out_size) if (!buf_in || !buf_out || *out_size != sizeof(u32) ||
in_size != sizeof(u32))
return -EINVAL; return -EINVAL;
pfc.data = *((u32 *)buf_in); pfc.data = *((u32 *)buf_in);
...@@ -711,12 +713,13 @@ int get_pfc_info(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -711,12 +713,13 @@ int get_pfc_info(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
int set_pfc_control(struct hinic_nic_dev *nic_dev, void *buf_in, int set_pfc_control(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
u8 pfc_en = 0; u8 pfc_en = 0;
u8 err = 0; u8 err = 0;
if (!buf_in || !buf_out || !out_size) if (!buf_in || !buf_out || *out_size != sizeof(u8) ||
in_size != sizeof(u8))
return -EINVAL; return -EINVAL;
pfc_en = *((u8 *)buf_in); pfc_en = *((u8 *)buf_in);
...@@ -742,15 +745,17 @@ int set_pfc_control(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -742,15 +745,17 @@ int set_pfc_control(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
int set_ets(struct hinic_nic_dev *nic_dev, void *buf_in, int set_ets(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
struct _ets ets = {0}; struct _ets ets = {0};
u8 err = 0; u8 err = 0;
u8 i; u8 i;
u8 support_tc = nic_dev->max_cos; u8 support_tc = nic_dev->max_cos;
if (!buf_in || !buf_out || !out_size) if (!buf_in || !buf_out || *out_size != sizeof(u8) ||
in_size != sizeof(struct _ets))
return -EINVAL; return -EINVAL;
memcpy(&ets, buf_in, sizeof(struct _ets)); memcpy(&ets, buf_in, sizeof(struct _ets));
if (!(test_bit(HINIC_DCB_ENABLE, &nic_dev->flags))) { if (!(test_bit(HINIC_DCB_ENABLE, &nic_dev->flags))) {
...@@ -804,7 +809,7 @@ int set_ets(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -804,7 +809,7 @@ int set_ets(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
int get_support_up(struct hinic_nic_dev *nic_dev, void *buf_in, int get_support_up(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
u8 *up_num = buf_out; u8 *up_num = buf_out;
u8 support_up = 0; u8 support_up = 0;
...@@ -832,7 +837,7 @@ int get_support_up(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -832,7 +837,7 @@ int get_support_up(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
int get_support_tc(struct hinic_nic_dev *nic_dev, void *buf_in, int get_support_tc(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
u8 *tc_num = buf_out; u8 *tc_num = buf_out;
...@@ -852,11 +857,11 @@ int get_support_tc(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -852,11 +857,11 @@ int get_support_tc(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
int get_ets_info(struct hinic_nic_dev *nic_dev, void *buf_in, int get_ets_info(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
struct _ets *ets = buf_out; struct _ets *ets = buf_out;
if (!buf_in || !buf_out || !out_size) if (!buf_in || !buf_out || *out_size != sizeof(*ets))
return -EINVAL; return -EINVAL;
hinic_dcbnl_set_ets_pecent_tool(nic_dev->netdev, hinic_dcbnl_set_ets_pecent_tool(nic_dev->netdev,
...@@ -871,12 +876,13 @@ int get_ets_info(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -871,12 +876,13 @@ int get_ets_info(struct hinic_nic_dev *nic_dev, void *buf_in,
} }
int set_pfc_priority(struct hinic_nic_dev *nic_dev, void *buf_in, int set_pfc_priority(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
u8 pfc_prority = 0; u8 pfc_prority = 0;
u8 err = 0; u8 err = 0;
if (!buf_in || !buf_out || !out_size) if (!buf_in || !buf_out || *out_size != sizeof(u8) ||
in_size != sizeof(u8))
return -EINVAL; return -EINVAL;
pfc_prority = *((u8 *)buf_in); pfc_prority = *((u8 *)buf_in);
...@@ -915,7 +921,8 @@ static int set_pf_bw_limit(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -915,7 +921,8 @@ static int set_pf_bw_limit(struct hinic_nic_dev *nic_dev, void *buf_in,
return -EINVAL; return -EINVAL;
} }
if (!buf_in || !buf_out || !out_size) if (!buf_in || !buf_out || in_size != sizeof(u32) ||
*out_size != sizeof(u8))
return -EINVAL; return -EINVAL;
pf_bw_limit = *((u32 *)buf_in); pf_bw_limit = *((u32 *)buf_in);
...@@ -947,7 +954,7 @@ static int get_pf_bw_limit(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -947,7 +954,7 @@ static int get_pf_bw_limit(struct hinic_nic_dev *nic_dev, void *buf_in,
return -EINVAL; return -EINVAL;
} }
if (*out_size != sizeof(u32)) { if (!buf_out || *out_size != sizeof(u32)) {
nicif_err(nic_dev, drv, nic_dev->netdev, nicif_err(nic_dev, drv, nic_dev->netdev,
"Unexpect out buf size from user :%d, expect: %lu\n", "Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(u32)); *out_size, sizeof(u32));
...@@ -966,7 +973,8 @@ static int get_poll_weight(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -966,7 +973,8 @@ static int get_poll_weight(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
struct hinic_nic_poll_weight *weight_info = buf_out; struct hinic_nic_poll_weight *weight_info = buf_out;
if (*out_size != sizeof(*weight_info)) {
if (!buf_out || *out_size != sizeof(*weight_info)) {
nicif_err(nic_dev, drv, nic_dev->netdev, nicif_err(nic_dev, drv, nic_dev->netdev,
"Unexpect out buf size from user :%d, expect: %lu\n", "Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(*weight_info)); *out_size, sizeof(*weight_info));
...@@ -981,6 +989,13 @@ static int set_poll_weight(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -981,6 +989,13 @@ static int set_poll_weight(struct hinic_nic_dev *nic_dev, void *buf_in,
{ {
struct hinic_nic_poll_weight *weight_info = buf_in; struct hinic_nic_poll_weight *weight_info = buf_in;
if (!buf_in || in_size != sizeof(*weight_info)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
"Unexpect in buf size from user :%d, expect: %lu\n",
*out_size, sizeof(*weight_info));
return -EFAULT;
}
nic_dev->poll_weight = weight_info->poll_weight; nic_dev->poll_weight = weight_info->poll_weight;
*out_size = sizeof(u32); *out_size = sizeof(u32);
return 0; return 0;
...@@ -990,7 +1005,7 @@ static int get_homologue(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -990,7 +1005,7 @@ static int get_homologue(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
struct hinic_homologues *homo = buf_out; struct hinic_homologues *homo = buf_out;
if (*out_size != sizeof(*homo)) { if (!buf_out || *out_size != sizeof(*homo)) {
nicif_err(nic_dev, drv, nic_dev->netdev, nicif_err(nic_dev, drv, nic_dev->netdev,
"Unexpect out buf size from user :%d, expect: %lu\n", "Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(*homo)); *out_size, sizeof(*homo));
...@@ -1011,6 +1026,12 @@ static int set_homologue(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -1011,6 +1026,12 @@ static int set_homologue(struct hinic_nic_dev *nic_dev, void *buf_in,
u32 in_size, void *buf_out, u32 *out_size) u32 in_size, void *buf_out, u32 *out_size)
{ {
struct hinic_homologues *homo = buf_in; struct hinic_homologues *homo = buf_in;
if (!buf_in || in_size != sizeof(*homo)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
"Unexpect in buf size from user :%d, expect: %lu\n",
*out_size, sizeof(*homo));
return -EFAULT;
}
if (homo->homo_state == HINIC_HOMOLOGUES_ON) { if (homo->homo_state == HINIC_HOMOLOGUES_ON) {
set_bit(HINIC_SAME_RXTX, &nic_dev->flags); set_bit(HINIC_SAME_RXTX, &nic_dev->flags);
...@@ -1031,8 +1052,8 @@ static int get_sset_count(struct hinic_nic_dev *nic_dev, void *buf_in, ...@@ -1031,8 +1052,8 @@ static int get_sset_count(struct hinic_nic_dev *nic_dev, void *buf_in,
{ {
u32 count; u32 count;
if (!buf_in || in_size != sizeof(u32) || !out_size || if (!buf_in || !buf_out || in_size != sizeof(u32) ||
*out_size != sizeof(u32) || !buf_out) { *out_size != sizeof(u32)) {
nicif_err(nic_dev, drv, nic_dev->netdev, nicif_err(nic_dev, drv, nic_dev->netdev,
"Invalid parameters.\n"); "Invalid parameters.\n");
return -EINVAL; return -EINVAL;
...@@ -1098,7 +1119,7 @@ static int get_func_type(void *hwdev, void *buf_in, u32 in_size, ...@@ -1098,7 +1119,7 @@ static int get_func_type(void *hwdev, void *buf_in, u32 in_size,
u16 func_typ; u16 func_typ;
func_typ = hinic_func_type(hwdev); func_typ = hinic_func_type(hwdev);
if (*out_size != sizeof(u16)) { if (!buf_out || *out_size != sizeof(u16)) {
pr_err("Unexpect out buf size from user :%d, expect: %lu\n", pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(u16)); *out_size, sizeof(u16));
return -EFAULT; return -EFAULT;
...@@ -1112,7 +1133,7 @@ static int get_func_id(void *hwdev, void *buf_in, u32 in_size, ...@@ -1112,7 +1133,7 @@ static int get_func_id(void *hwdev, void *buf_in, u32 in_size,
{ {
u16 func_id; u16 func_id;
if (*out_size != sizeof(u16)) { if (!buf_out || *out_size != sizeof(u16)) {
pr_err("Unexpect out buf size from user :%d, expect: %lu\n", pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(u16)); *out_size, sizeof(u16));
return -EFAULT; return -EFAULT;
...@@ -1130,14 +1151,14 @@ static int get_chip_faults_stats(void *hwdev, void *buf_in, u32 in_size, ...@@ -1130,14 +1151,14 @@ static int get_chip_faults_stats(void *hwdev, void *buf_in, u32 in_size,
int offset = 0; int offset = 0;
struct chip_fault_stats *fault_info; struct chip_fault_stats *fault_info;
if (*out_size != sizeof(*fault_info)) { if (!buf_in || !buf_out || *out_size != sizeof(*fault_info) ||
in_size != sizeof(*fault_info)) {
pr_err("Unexpect out buf size from user :%d, expect: %lu\n", pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(*fault_info)); *out_size, sizeof(*fault_info));
return -EFAULT; return -EFAULT;
} }
fault_info = (struct chip_fault_stats *)buf_in; fault_info = (struct chip_fault_stats *)buf_in;
offset = fault_info->offset; offset = fault_info->offset;
fault_info = (struct chip_fault_stats *)buf_out; fault_info = (struct chip_fault_stats *)buf_out;
hinic_get_chip_fault_stats(hwdev, fault_info->chip_faults, offset); hinic_get_chip_fault_stats(hwdev, fault_info->chip_faults, offset);
...@@ -1191,6 +1212,13 @@ static int get_chip_id_test(void *hwdev, void *buf_in, u32 in_size, ...@@ -1191,6 +1212,13 @@ static int get_chip_id_test(void *hwdev, void *buf_in, u32 in_size,
static int get_single_card_info(void *hwdev, void *buf_in, u32 in_size, static int get_single_card_info(void *hwdev, void *buf_in, u32 in_size,
void *buf_out, u32 *out_size) void *buf_out, u32 *out_size)
{ {
if (!buf_in || !buf_out || in_size != sizeof(struct card_info) ||
*out_size != sizeof(struct card_info)) {
pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(struct card_info));
return -EFAULT;
}
hinic_get_card_info(hwdev, buf_out); hinic_get_card_info(hwdev, buf_out);
*out_size = in_size; *out_size = in_size;
...@@ -1202,7 +1230,8 @@ static int get_device_id(void *hwdev, void *buf_in, u32 in_size, ...@@ -1202,7 +1230,8 @@ static int get_device_id(void *hwdev, void *buf_in, u32 in_size,
{ {
u16 dev_id; u16 dev_id;
int err; int err;
if (*out_size != sizeof(u16)) { if (!buf_out || !buf_in || *out_size != sizeof(u16) ||
in_size != sizeof(u16)) {
pr_err("Unexpect out buf size from user :%d, expect: %lu\n", pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
*out_size, sizeof(u16)); *out_size, sizeof(u16));
return -EFAULT; return -EFAULT;
...@@ -1242,7 +1271,8 @@ static int get_pf_id(void *hwdev, void *buf_in, u32 in_size, ...@@ -1242,7 +1271,8 @@ static int get_pf_id(void *hwdev, void *buf_in, u32 in_size,
u32 port_id = 0; u32 port_id = 0;
int err; int err;
if (!buf_out || (*out_size != sizeof(*pf_info))) if (!buf_out || (*out_size != sizeof(*pf_info)) ||
!buf_in || in_size != sizeof(u32))
return -EINVAL; return -EINVAL;
port_id = *((u32 *)buf_in); port_id = *((u32 *)buf_in);
...@@ -1307,6 +1337,14 @@ static int get_pf_dev_info(char *dev_name, struct msg_module *nt_msg) ...@@ -1307,6 +1337,14 @@ static int get_pf_dev_info(char *dev_name, struct msg_module *nt_msg)
int i; int i;
int err; int err;
if (nt_msg->lenInfo.outBuffLen != (sizeof(dev_info) * 16) ||
nt_msg->lenInfo.inBuffLen != (sizeof(dev_info) * 16)) {
pr_err("Invalid out_buf_size %d or Invalid in_buf_size %d, expect %lu\n",
nt_msg->lenInfo.outBuffLen, nt_msg->lenInfo.inBuffLen,
(sizeof(dev_info) * 16));
return -EINVAL;
}
for (i = 0; i < MAX_CARD_NUM; i++) { for (i = 0; i < MAX_CARD_NUM; i++) {
card_info = (struct card_node *)g_card_node_array[i]; card_info = (struct card_node *)g_card_node_array[i];
if (!card_info) if (!card_info)
...@@ -1363,17 +1401,18 @@ static int knl_free_mem(char *dev_name, struct msg_module *nt_msg) ...@@ -1363,17 +1401,18 @@ static int knl_free_mem(char *dev_name, struct msg_module *nt_msg)
} }
extern int hinic_get_card_func_info_by_card_name(const char *chip_name, extern int hinic_get_card_func_info_by_card_name(const char *chip_name,
struct hinic_card_func_info struct hinic_card_func_info *card_func);
*card_func);
static int get_card_func_info(char *dev_name, struct msg_module *nt_msg) static int get_card_func_info(char *dev_name, struct msg_module *nt_msg)
{ {
struct hinic_card_func_info card_func_info = {0}; struct hinic_card_func_info card_func_info = {0};
int id, err; int id, err;
if (nt_msg->lenInfo.outBuffLen != sizeof(card_func_info)) { if (nt_msg->lenInfo.outBuffLen != sizeof(card_func_info) ||
pr_err("Invalid out_buf_size %d, expect %lu\n", nt_msg->lenInfo.inBuffLen != sizeof(card_func_info)) {
nt_msg->lenInfo.outBuffLen, sizeof(card_func_info)); pr_err("Invalid out_buf_size %d or Invalid in_buf_size %d, expect %lu\n",
nt_msg->lenInfo.outBuffLen, nt_msg->lenInfo.inBuffLen,
sizeof(card_func_info));
return -EINVAL; return -EINVAL;
} }
...@@ -1579,6 +1618,10 @@ static int api_csr_read(void *hwdev, struct msg_module *nt_msg, ...@@ -1579,6 +1618,10 @@ static int api_csr_read(void *hwdev, struct msg_module *nt_msg,
u8 node_id; u8 node_id;
u32 i; u32 i;
if (!buf_in || !buf_out || in_size != sizeof(*up_log_msg) ||
*out_size != up_log_msg->rd_len)
return -EINVAL;
rd_len = up_log_msg->rd_len; rd_len = up_log_msg->rd_len;
rd_addr = up_log_msg->addr; rd_addr = up_log_msg->addr;
node_id = (u8)nt_msg->up_cmd.up_db.comm_mod_type; node_id = (u8)nt_msg->up_cmd.up_db.comm_mod_type;
...@@ -1618,6 +1661,9 @@ static int api_csr_write(void *hwdev, struct msg_module *nt_msg, ...@@ -1618,6 +1661,9 @@ static int api_csr_write(void *hwdev, struct msg_module *nt_msg,
u32 i; u32 i;
u8 *data; u8 *data;
if (!buf_in || in_size != sizeof(*csr_write_msg))
return -EINVAL;
rd_len = csr_write_msg->rd_len; rd_len = csr_write_msg->rd_len;
rd_addr = csr_write_msg->addr; rd_addr = csr_write_msg->addr;
node_id = (u8)nt_msg->up_cmd.up_db.comm_mod_type; node_id = (u8)nt_msg->up_cmd.up_db.comm_mod_type;
...@@ -1785,6 +1831,10 @@ static int send_to_sm(void *hwdev, struct msg_module *nt_msg, ...@@ -1785,6 +1831,10 @@ static int send_to_sm(void *hwdev, struct msg_module *nt_msg,
sizeof(sm_module_cmd_handle[0]); sizeof(sm_module_cmd_handle[0]);
int ret = 0; int ret = 0;
if (!buf_in || !buf_out || in_size != sizeof(*sm_in) ||
*out_size != sizeof(*sm_out))
return -EINVAL;
for (index = 0; index < num_cmds; index++) { for (index = 0; index < num_cmds; index++) {
if (msg_formate == sm_module_cmd_handle[index].smCmdName) if (msg_formate == sm_module_cmd_handle[index].smCmdName)
ret = sm_module_cmd_handle[index].smFunc(hwdev, ret = sm_module_cmd_handle[index].smFunc(hwdev,
...@@ -1823,12 +1873,12 @@ static bool is_hwdev_cmd_support(unsigned int mod, ...@@ -1823,12 +1873,12 @@ static bool is_hwdev_cmd_support(unsigned int mod,
return false; return false;
} }
} else if (!hinic_is_hwdev_mod_inited } else if (!hinic_is_hwdev_mod_inited
(hwdev, HINIC_HWDEV_MGMT_INITED)) { (hwdev, HINIC_HWDEV_MGMT_INITED)) {
pr_err("MGMT have not initialized\n"); pr_err("MGMT have not initialized\n");
return false; return false;
} }
} else if (!hinic_is_hwdev_mod_inited } else if (!hinic_is_hwdev_mod_inited
(hwdev, HINIC_HWDEV_MBOX_INITED)) { (hwdev, HINIC_HWDEV_MBOX_INITED)) {
pr_err("MBOX have not initialized\n"); pr_err("MBOX have not initialized\n");
return false; return false;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册