提交 200f5d7b 编写于 作者: S Shaozhengchao 提交者: Yang Yingliang

net/hinic: driver code compliance rectification

driver inclusion
category:bugfix
bugzilla:4472
CVE:NA

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

hinic driver code compliance rectification.
1.Process return value of snprintf and sscanf function.
2.Modify devil number.
Signed-off-by: NShaozhengchao <shaozhengchao@huawei.com>
Reviewed-by: NLuoshaokai <luoshaokai@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 2b34ce42
...@@ -768,7 +768,7 @@ int dbgtool_knl_init(void *vhwdev, void *chip_node) ...@@ -768,7 +768,7 @@ int dbgtool_knl_init(void *vhwdev, void *chip_node)
sema_init(&dbgtool_info->dbgtool_sem, 1); sema_init(&dbgtool_info->dbgtool_sem, 1);
ret = sscanf(chip_info->chip_name, HINIC_CHIP_NAME "%d", &id); ret = sscanf(chip_info->chip_name, HINIC_CHIP_NAME "%d", &id);
if (ret < 0) { if (ret <= 0) {
pr_err("Failed to get hinic id\n"); pr_err("Failed to get hinic id\n");
goto sscanf_chdev_fail; goto sscanf_chdev_fail;
} }
...@@ -874,7 +874,7 @@ void dbgtool_knl_deinit(void *vhwdev, void *chip_node) ...@@ -874,7 +874,7 @@ void dbgtool_knl_deinit(void *vhwdev, void *chip_node)
return; return;
err = sscanf(chip_info->chip_name, HINIC_CHIP_NAME "%d", &id); err = sscanf(chip_info->chip_name, HINIC_CHIP_NAME "%d", &id);
if (err < 0) if (err <= 0)
pr_err("Failed to get hinic id\n"); pr_err("Failed to get hinic id\n");
g_card_node_array[id] = NULL; g_card_node_array[id] = NULL;
......
...@@ -1133,15 +1133,27 @@ static int init_eq(struct hinic_eq *eq, struct hinic_hwdev *hwdev, u16 q_id, ...@@ -1133,15 +1133,27 @@ static int init_eq(struct hinic_eq *eq, struct hinic_hwdev *hwdev, u16 q_id,
} }
if (type == HINIC_AEQ) { if (type == HINIC_AEQ) {
snprintf(eq->irq_name, sizeof(eq->irq_name), err = snprintf(eq->irq_name, sizeof(eq->irq_name),
"hinic_aeq%d@pci:%s", eq->q_id, "hinic_aeq%d@pci:%s", eq->q_id,
pci_name(hwdev->pcidev_hdl)); pci_name(hwdev->pcidev_hdl));
if (err <= 0 || err >= (int)sizeof(eq->irq_name)) {
pr_err("Failed snprintf irq_name, function return(%d) and dest_len(%d)\n",
err, (int)sizeof(eq->irq_name));
err = -EINVAL;
goto req_irq_err;
}
err = request_irq(entry->irq_id, aeq_interrupt, 0UL, err = request_irq(entry->irq_id, aeq_interrupt, 0UL,
eq->irq_name, eq); eq->irq_name, eq);
} else { } else {
snprintf(eq->irq_name, sizeof(eq->irq_name), err = snprintf(eq->irq_name, sizeof(eq->irq_name),
"hinic_ceq%d@pci:%s", eq->q_id, "hinic_ceq%d@pci:%s", eq->q_id,
pci_name(hwdev->pcidev_hdl)); pci_name(hwdev->pcidev_hdl));
if (err <= 0 || err >= (int)sizeof(eq->irq_name)) {
pr_err("Failed snprintf irq_name, function return(%d) and dest_len(%d)\n",
err, (int)sizeof(eq->irq_name));
err = -EINVAL;
goto req_irq_err;
}
err = request_irq(entry->irq_id, ceq_interrupt, 0UL, err = request_irq(entry->irq_id, ceq_interrupt, 0UL,
eq->irq_name, eq); eq->irq_name, eq);
} }
......
...@@ -294,12 +294,15 @@ u32 hinic_get_io_stats_size(struct hinic_nic_dev *nic_dev) ...@@ -294,12 +294,15 @@ u32 hinic_get_io_stats_size(struct hinic_nic_dev *nic_dev)
} }
#define QUEUE_STATS_PACK(items, item_idx, array, stats_ptr, qid) { \ #define QUEUE_STATS_PACK(items, item_idx, array, stats_ptr, qid) { \
int j; \ int j, err; \
for (j = 0; j < ARRAY_LEN(array); j++) { \ for (j = 0; j < ARRAY_LEN(array); j++) { \
memcpy((items)[item_idx].name, (array)[j].name, \ memcpy((items)[item_idx].name, (array)[j].name, \
HINIC_SHOW_ITEM_LEN); \ HINIC_SHOW_ITEM_LEN); \
snprintf((items)[item_idx].name, HINIC_SHOW_ITEM_LEN, \ err = snprintf((items)[item_idx].name, HINIC_SHOW_ITEM_LEN,\
(array)[j].name, (qid)); \ (array)[j].name, (qid)); \
if (err <= 0 || err >= HINIC_SHOW_ITEM_LEN) \
pr_err("Failed snprintf: func_ret(%d), dest_len(%d)\n",\
err, HINIC_SHOW_ITEM_LEN); \
(items)[item_idx].hexadecimal = 0; \ (items)[item_idx].hexadecimal = 0; \
(items)[item_idx].value = \ (items)[item_idx].value = \
GET_VALUE_OF_PTR((array)[j].size, \ GET_VALUE_OF_PTR((array)[j].size, \
...@@ -335,6 +338,8 @@ void hinic_get_io_stats(struct hinic_nic_dev *nic_dev, ...@@ -335,6 +338,8 @@ void hinic_get_io_stats(struct hinic_nic_dev *nic_dev,
#define LP_DEFAULT_TIME (5) /* seconds */ #define LP_DEFAULT_TIME (5) /* seconds */
#define LP_PKT_LEN (1514) #define LP_PKT_LEN (1514)
#define OBJ_STR_MAX_LEN (32)
#define SET_LINK_STR_MAX_LEN (128)
#define PORT_DOWN_ERR_IDX 0 #define PORT_DOWN_ERR_IDX 0
enum diag_test_index { enum diag_test_index {
...@@ -743,16 +748,28 @@ static int hinic_set_settings_to_hw(struct hinic_nic_dev *nic_dev, ...@@ -743,16 +748,28 @@ static int hinic_set_settings_to_hw(struct hinic_nic_dev *nic_dev,
struct net_device *netdev = nic_dev->netdev; struct net_device *netdev = nic_dev->netdev;
struct hinic_link_ksettings settings = {0}; struct hinic_link_ksettings settings = {0};
enum nic_speed_level speed_level = 0; enum nic_speed_level speed_level = 0;
char set_link_str[128] = {0}; char set_link_str[SET_LINK_STR_MAX_LEN] = {0};
int err = 0; int err = 0;
snprintf(set_link_str, sizeof(set_link_str), "%s", err = snprintf(set_link_str, sizeof(set_link_str), "%s",
(set_settings & HILINK_LINK_SET_AUTONEG) ? (set_settings & HILINK_LINK_SET_AUTONEG) ?
(autoneg ? "autong enable " : "autong disable ") : ""); (autoneg ? "autong enable " : "autong disable ") : "");
if (err < 0 || err >= SET_LINK_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
"Failed snprintf link state, function return(%d) and dest_len(%d)\n",
err, SET_LINK_STR_MAX_LEN);
return -EFAULT;
}
if (set_settings & HILINK_LINK_SET_SPEED) { if (set_settings & HILINK_LINK_SET_SPEED) {
speed_level = hinic_ethtool_to_hw_speed_level(speed); speed_level = hinic_ethtool_to_hw_speed_level(speed);
snprintf(set_link_str, sizeof(set_link_str), err = snprintf(set_link_str, sizeof(set_link_str),
"%sspeed %d ", set_link_str, speed); "%sspeed %d ", set_link_str, speed);
if (err <= 0 || err >= SET_LINK_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
"Failed snprintf link speed, function return(%d) and dest_len(%d)\n",
err, SET_LINK_STR_MAX_LEN);
return -EFAULT;
}
} }
settings.valid_bitmap = set_settings; settings.valid_bitmap = set_settings;
...@@ -883,7 +900,12 @@ static void hinic_get_drvinfo(struct net_device *netdev, ...@@ -883,7 +900,12 @@ static void hinic_get_drvinfo(struct net_device *netdev,
return; return;
} }
snprintf(info->fw_version, sizeof(info->fw_version), "%s", mgmt_ver); err = snprintf(info->fw_version, sizeof(info->fw_version),
"%s", mgmt_ver);
if (err <= 0 || err >= (int)sizeof(info->fw_version))
nicif_err(nic_dev, drv, netdev,
"Failed snprintf fw_version, function return(%d) and dest_len(%d)\n",
err, (int)sizeof(info->fw_version));
} }
static u32 hinic_get_msglevel(struct net_device *netdev) static u32 hinic_get_msglevel(struct net_device *netdev)
...@@ -1429,10 +1451,22 @@ static int __hinic_set_coalesce(struct net_device *netdev, ...@@ -1429,10 +1451,22 @@ static int __hinic_set_coalesce(struct net_device *netdev,
if (queue == COALESCE_ALL_QUEUE) { if (queue == COALESCE_ALL_QUEUE) {
ori_intr_coal = &nic_dev->intr_coalesce[0]; ori_intr_coal = &nic_dev->intr_coalesce[0];
snprintf(obj_str, sizeof(obj_str), "for netdev"); err = snprintf(obj_str, sizeof(obj_str), "for netdev");
if (err <= 0 || err >= OBJ_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
"Failed snprintf string, function return(%d) and dest_len(%d)\n",
err, OBJ_STR_MAX_LEN);
return -EFAULT;
}
} else { } else {
ori_intr_coal = &nic_dev->intr_coalesce[queue]; ori_intr_coal = &nic_dev->intr_coalesce[queue];
snprintf(obj_str, sizeof(obj_str), "for queue %d", queue); err = snprintf(obj_str, sizeof(obj_str), "for queue %d", queue);
if (err <= 0 || err >= OBJ_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
"Failed snprintf string, function return(%d) and dest_len(%d)\n",
err, OBJ_STR_MAX_LEN);
return -EFAULT;
}
} }
CHECK_COALESCE_CHANGED(coal, rx_coalesce_usecs, COALESCE_TIMER_CFG_UNIT, CHECK_COALESCE_CHANGED(coal, rx_coalesce_usecs, COALESCE_TIMER_CFG_UNIT,
ori_intr_coal->coalesce_timer_cfg, obj_str); ori_intr_coal->coalesce_timer_cfg, obj_str);
......
...@@ -519,6 +519,9 @@ static inline void __set_heartbeat_ehd_detect_delay(struct hinic_hwdev *hwdev, ...@@ -519,6 +519,9 @@ static inline void __set_heartbeat_ehd_detect_delay(struct hinic_hwdev *hwdev,
#define HINIC_QUEUE_MAX_DEPTH 12 #define HINIC_QUEUE_MAX_DEPTH 12
#define HINIC_MAX_RX_BUFFER_SIZE 15 #define HINIC_MAX_RX_BUFFER_SIZE 15
#define CAP_INFO_MAC_LEN 512
#define VENDOR_MAX_LEN 17
static bool check_root_ctxt(struct hinic_hwdev *hwdev, u16 func_idx, static bool check_root_ctxt(struct hinic_hwdev *hwdev, u16 func_idx,
void *buf_in, u16 in_size) void *buf_in, u16 in_size)
{ {
...@@ -3891,6 +3894,7 @@ static void __print_cable_info(struct hinic_hwdev *hwdev, ...@@ -3891,6 +3894,7 @@ static void __print_cable_info(struct hinic_hwdev *hwdev,
char tmp_vendor[17] = {0}; char tmp_vendor[17] = {0};
char *port_type = "Unknown port type"; char *port_type = "Unknown port type";
int i; int i;
int err = 0;
if (info->cable_absent) { if (info->cable_absent) {
sdk_info(hwdev->dev_hdl, "Cable unpresent\n"); sdk_info(hwdev->dev_hdl, "Cable unpresent\n");
...@@ -3918,24 +3922,45 @@ static void __print_cable_info(struct hinic_hwdev *hwdev, ...@@ -3918,24 +3922,45 @@ static void __print_cable_info(struct hinic_hwdev *hwdev,
memcpy(tmp_vendor, info->vendor_name, memcpy(tmp_vendor, info->vendor_name,
sizeof(info->vendor_name)); sizeof(info->vendor_name));
snprintf(tmp_str, sizeof(tmp_str) - 1, err = snprintf(tmp_str, sizeof(tmp_str),
"Vendor: %s, %s, length: %um, max_speed: %uGbps", "Vendor: %s, %s, length: %um, max_speed: %uGbps",
tmp_vendor, port_type, info->cable_length, tmp_vendor, port_type, info->cable_length,
info->cable_max_speed); info->cable_max_speed);
if (err <= 0 || err >= CAP_INFO_MAC_LEN) {
sdk_err(hwdev->dev_hdl,
"Failed snprintf cable vendor info, function return(%d) and dest_len(%d)\n",
err, CAP_INFO_MAC_LEN);
return;
}
if (info->port_type == LINK_PORT_FIBRE || if (info->port_type == LINK_PORT_FIBRE ||
info->port_type == LINK_PORT_AOC) { info->port_type == LINK_PORT_AOC) {
snprintf(tmp_str, sizeof(tmp_str) - 1, err = snprintf(tmp_str, sizeof(tmp_str),
"%s, %s, Temperature: %u", tmp_str, "%s, %s, Temperature: %u", tmp_str,
info->sfp_type ? "SFP" : "QSFP", info->cable_temp); info->sfp_type ? "SFP" : "QSFP",
info->cable_temp);
if (err <= 0 || err >= CAP_INFO_MAC_LEN) {
sdk_err(hwdev->dev_hdl,
"Failed snprintf cable Temp, function return(%d) and dest_len(%d)\n",
err, CAP_INFO_MAC_LEN);
return;
}
if (info->sfp_type) { if (info->sfp_type) {
snprintf(tmp_str, sizeof(tmp_str) - 1, err = snprintf(tmp_str, sizeof(tmp_str),
"%s, rx power: %uuW, tx power: %uuW", "%s, rx power: %uuW, tx power: %uuW",
tmp_str, info->power[0], info->power[1]); tmp_str, info->power[0], info->power[1]);
} else { } else {
snprintf(tmp_str, sizeof(tmp_str) - 1, err = snprintf(tmp_str, sizeof(tmp_str),
"%s, rx power: %uuw %uuW %uuW %uuW", "%s, rx power: %uuw %uuW %uuW %uuW",
tmp_str, info->power[0], info->power[1], tmp_str, info->power[0], info->power[1],
info->power[2], info->power[3]); info->power[2], info->power[3]);
}
if (err <= 0 || err >= CAP_INFO_MAC_LEN) {
sdk_err(hwdev->dev_hdl,
"Failed snprintf power info, function return(%d) and dest_len(%d)\n",
err, CAP_INFO_MAC_LEN);
return;
} }
} }
......
...@@ -629,6 +629,7 @@ static void hinic_ignore_minor_version(char *version) ...@@ -629,6 +629,7 @@ static void hinic_ignore_minor_version(char *version)
{ {
char ver_split[MAX_VER_SPLIT_NUM][MAX_VER_FIELD_LEN] = { {0} }; char ver_split[MAX_VER_SPLIT_NUM][MAX_VER_FIELD_LEN] = { {0} };
int max_ver_len, split_num = 0; int max_ver_len, split_num = 0;
int err;
__version_split(version, &split_num, ver_split); __version_split(version, &split_num, ver_split);
if (split_num != MAX_VER_SPLIT_NUM) if (split_num != MAX_VER_SPLIT_NUM)
...@@ -637,8 +638,11 @@ static void hinic_ignore_minor_version(char *version) ...@@ -637,8 +638,11 @@ static void hinic_ignore_minor_version(char *version)
max_ver_len = (int)strlen(version) + 1; max_ver_len = (int)strlen(version) + 1;
memset(version, 0, max_ver_len); memset(version, 0, max_ver_len);
snprintf(version, max_ver_len, "%s.%s.%s.0", err = snprintf(version, max_ver_len, "%s.%s.%s.0",
ver_split[0], ver_split[1], ver_split[2]); ver_split[0], ver_split[1], ver_split[2]);
if (err <= 0 || err >= max_ver_len)
pr_err("Failed snprintf version, function return(%d) and dest_len(%d)\n",
err, max_ver_len);
} }
static int hinic_detect_version_compatible(struct hinic_pcidev *pcidev) static int hinic_detect_version_compatible(struct hinic_pcidev *pcidev)
...@@ -1152,7 +1156,7 @@ void hinic_get_all_chip_id(void *id_info) ...@@ -1152,7 +1156,7 @@ void hinic_get_all_chip_id(void *id_info)
lld_dev_hold(); lld_dev_hold();
list_for_each_entry(chip_node, &g_hinic_chip_list, node) { list_for_each_entry(chip_node, &g_hinic_chip_list, node) {
err = sscanf(chip_node->chip_name, HINIC_CHIP_NAME "%d", &id); err = sscanf(chip_node->chip_name, HINIC_CHIP_NAME "%d", &id);
if (err < 0) if (err <= 0)
pr_err("Failed to get hinic id\n"); pr_err("Failed to get hinic id\n");
card_id->id[i] = id; card_id->id[i] = id;
...@@ -1895,6 +1899,7 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter) ...@@ -1895,6 +1899,7 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter)
struct card_node *chip_node; struct card_node *chip_node;
unsigned char i; unsigned char i;
unsigned char parent_bus_number = 0; unsigned char parent_bus_number = 0;
int err;
if (!pci_is_root_bus(pci_adapter->pcidev->bus)) if (!pci_is_root_bus(pci_adapter->pcidev->bus))
parent_bus_number = pci_adapter->pcidev->bus->parent->number; parent_bus_number = pci_adapter->pcidev->bus->parent->number;
...@@ -1931,27 +1936,39 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter) ...@@ -1931,27 +1936,39 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter)
chip_node = kzalloc(sizeof(*chip_node), GFP_KERNEL); chip_node = kzalloc(sizeof(*chip_node), GFP_KERNEL);
if (!chip_node) { if (!chip_node) {
card_bit_map = CLEAR_BIT(card_bit_map, i);
sdk_err(&pci_adapter->pcidev->dev, sdk_err(&pci_adapter->pcidev->dev,
"Failed to alloc chip node\n"); "Failed to alloc chip node\n");
return -ENOMEM; goto alloc_chip_err;
} }
chip_node->dbgtool_attr_file.name = kzalloc(IFNAMSIZ, GFP_KERNEL); chip_node->dbgtool_attr_file.name = kzalloc(IFNAMSIZ, GFP_KERNEL);
if (!(chip_node->dbgtool_attr_file.name)) { if (!(chip_node->dbgtool_attr_file.name)) {
kfree(chip_node);
card_bit_map = CLEAR_BIT(card_bit_map, i);
sdk_err(&pci_adapter->pcidev->dev, sdk_err(&pci_adapter->pcidev->dev,
"Failed to alloc dbgtool attr file name\n"); "Failed to alloc dbgtool attr file name\n");
return -ENOMEM; goto alloc_dbgtool_attr_file_err;
} }
/* parent bus number */ /* parent bus number */
chip_node->dp_bus_num = parent_bus_number; chip_node->dp_bus_num = parent_bus_number;
snprintf(chip_node->chip_name, IFNAMSIZ, "%s%d", HINIC_CHIP_NAME, i); err = snprintf(chip_node->chip_name, IFNAMSIZ, "%s%d",
snprintf((char *)chip_node->dbgtool_attr_file.name, HINIC_CHIP_NAME, i);
IFNAMSIZ, "%s%d", HINIC_CHIP_NAME, i); if (err <= 0 || err >= IFNAMSIZ) {
sdk_err(&pci_adapter->pcidev->dev,
"Failed snprintf chip_name, function return(%d) and dest_len(%d)\n",
err, IFNAMSIZ);
goto alloc_dbgtool_attr_file_err;
}
err = snprintf((char *)chip_node->dbgtool_attr_file.name,
IFNAMSIZ, "%s%d", HINIC_CHIP_NAME, i);
if (err <= 0 || err >= IFNAMSIZ) {
sdk_err(&pci_adapter->pcidev->dev,
"Failed snprintf dbgtool_attr_file_name, function return(%d) and dest_len(%d)\n",
err, IFNAMSIZ);
goto alloc_dbgtool_attr_file_err;
}
sdk_info(&pci_adapter->pcidev->dev, sdk_info(&pci_adapter->pcidev->dev,
"Add new chip %s to global list succeed\n", "Add new chip %s to global list succeed\n",
chip_node->chip_name); chip_node->chip_name);
...@@ -1962,6 +1979,13 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter) ...@@ -1962,6 +1979,13 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter)
pci_adapter->chip_node = chip_node; pci_adapter->chip_node = chip_node;
return 0; return 0;
alloc_dbgtool_attr_file_err:
kfree(chip_node);
alloc_chip_err:
card_bit_map = CLEAR_BIT(card_bit_map, i);
return -ENOMEM;
} }
static void free_chip_node(struct hinic_pcidev *pci_adapter) static void free_chip_node(struct hinic_pcidev *pci_adapter)
...@@ -1976,7 +2000,7 @@ static void free_chip_node(struct hinic_pcidev *pci_adapter) ...@@ -1976,7 +2000,7 @@ static void free_chip_node(struct hinic_pcidev *pci_adapter)
"Delete chip %s from global list succeed\n", "Delete chip %s from global list succeed\n",
chip_node->chip_name); chip_node->chip_name);
err = sscanf(chip_node->chip_name, HINIC_CHIP_NAME "%u", &id); err = sscanf(chip_node->chip_name, HINIC_CHIP_NAME "%u", &id);
if (err < 0) if (err <= 0)
sdk_err(&pci_adapter->pcidev->dev, "Failed to get hinic id\n"); sdk_err(&pci_adapter->pcidev->dev, "Failed to get hinic id\n");
card_bit_map = CLEAR_BIT(card_bit_map, id); card_bit_map = CLEAR_BIT(card_bit_map, id);
......
...@@ -750,8 +750,15 @@ static int hinic_qps_irq_init(struct hinic_nic_dev *nic_dev) ...@@ -750,8 +750,15 @@ static int hinic_qps_irq_init(struct hinic_nic_dev *nic_dev)
cpumask_set_cpu(local_cpu, &irq_cfg->affinity_mask); cpumask_set_cpu(local_cpu, &irq_cfg->affinity_mask);
} }
snprintf(irq_cfg->irq_name, sizeof(irq_cfg->irq_name), err = snprintf(irq_cfg->irq_name, sizeof(irq_cfg->irq_name),
"%s_qp%d", nic_dev->netdev->name, q_id); "%s_qp%d", nic_dev->netdev->name, q_id);
if (err <= 0 || err >= (int)sizeof(irq_cfg->irq_name)) {
nic_err(&pdev->dev,
"Failed snprintf irq_name, function return(%d) and dest_len(%d)\n",
err, (int)sizeof(irq_cfg->irq_name));
goto req_tx_irq_err;
}
err = hinic_request_irq(irq_cfg, q_id); err = hinic_request_irq(irq_cfg, q_id);
if (err) { if (err) {
nicif_err(nic_dev, drv, nic_dev->netdev, "Failed to request Rx irq\n"); nicif_err(nic_dev, drv, nic_dev->netdev, "Failed to request Rx irq\n");
......
...@@ -2175,7 +2175,13 @@ int hinic_get_mgmt_version(void *hwdev, u8 *mgmt_ver) ...@@ -2175,7 +2175,13 @@ int hinic_get_mgmt_version(void *hwdev, u8 *mgmt_ver)
return -EINVAL; return -EINVAL;
} }
snprintf(mgmt_ver, HINIC_MGMT_VERSION_MAX_LEN, "%s", up_ver.ver); err = snprintf(mgmt_ver, HINIC_MGMT_VERSION_MAX_LEN, "%s", up_ver.ver);
if (err <= 0 || err >= HINIC_MGMT_VERSION_MAX_LEN) {
nic_err(dev->dev_hdl,
"Failed snprintf fw version, function return(%d) and dest_len(%d)\n",
err, HINIC_MGMT_VERSION_MAX_LEN);
return -EINVAL;
}
return 0; return 0;
} }
......
...@@ -1179,14 +1179,20 @@ static int get_drv_version(void *hwdev, void *buf_in, u32 in_size, ...@@ -1179,14 +1179,20 @@ static int get_drv_version(void *hwdev, void *buf_in, u32 in_size,
{ {
struct drv_version_info *ver_info; struct drv_version_info *ver_info;
char ver_str[MAX_VER_INFO_LEN] = {0}; char ver_str[MAX_VER_INFO_LEN] = {0};
int err;
if (*out_size != sizeof(*ver_info)) { if (*out_size != sizeof(*ver_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(*ver_info)); *out_size, sizeof(*ver_info));
return -EFAULT; return -EFAULT;
} }
snprintf(ver_str, sizeof(ver_str), "%s [compiled with the kernel]", err = snprintf(ver_str, sizeof(ver_str),
HINIC_DRV_VERSION); "%s [compiled with the kernel]", HINIC_DRV_VERSION);
if (err <= 0 || err >= MAX_VER_INFO_LEN) {
pr_err("Failed snprintf driver version, function return(%d) and dest_len(%d)\n",
err, MAX_VER_INFO_LEN);
return -EFAULT;
}
ver_info = (struct drv_version_info *)buf_out; ver_info = (struct drv_version_info *)buf_out;
memcpy(ver_info->ver, ver_str, sizeof(ver_str)); memcpy(ver_info->ver, ver_str, sizeof(ver_str));
...@@ -1420,7 +1426,7 @@ static int get_card_func_info(char *dev_name, struct msg_module *nt_msg) ...@@ -1420,7 +1426,7 @@ static int get_card_func_info(char *dev_name, struct msg_module *nt_msg)
} }
err = sscanf(dev_name, HINIC_CHIP_NAME "%d", &id); err = sscanf(dev_name, HINIC_CHIP_NAME "%d", &id);
if (err < 0) { if (err <= 0) {
pr_err("Failed to get hinic id\n"); pr_err("Failed to get hinic id\n");
return err; return err;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册