net: hinic: fix memory leak when reading function table
authorZhengchao Shao <shaozhengchao@huawei.com>
Wed, 19 Oct 2022 09:57:52 +0000 (17:57 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 21 Oct 2022 04:09:47 +0000 (21:09 -0700)
When the input parameter idx meets the expected case option in
hinic_dbg_get_func_table(), read_data is not released. Fix it.

Fixes: 5215e16244ee ("hinic: add support to query function table")
Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/huawei/hinic/hinic_debugfs.c

index 19eb839177ec2fe67643d676b2a3d9b14f448031..061952c6c21a497d57173db42dfb391d63dbf776 100644 (file)
@@ -85,6 +85,7 @@ static int hinic_dbg_get_func_table(struct hinic_dev *nic_dev, int idx)
        struct tag_sml_funcfg_tbl *funcfg_table_elem;
        struct hinic_cmd_lt_rd *read_data;
        u16 out_size = sizeof(*read_data);
+       int ret = ~0;
        int err;
 
        read_data = kzalloc(sizeof(*read_data), GFP_KERNEL);
@@ -111,20 +112,25 @@ static int hinic_dbg_get_func_table(struct hinic_dev *nic_dev, int idx)
 
        switch (idx) {
        case VALID:
-               return funcfg_table_elem->dw0.bs.valid;
+               ret = funcfg_table_elem->dw0.bs.valid;
+               break;
        case RX_MODE:
-               return funcfg_table_elem->dw0.bs.nic_rx_mode;
+               ret = funcfg_table_elem->dw0.bs.nic_rx_mode;
+               break;
        case MTU:
-               return funcfg_table_elem->dw1.bs.mtu;
+               ret = funcfg_table_elem->dw1.bs.mtu;
+               break;
        case RQ_DEPTH:
-               return funcfg_table_elem->dw13.bs.cfg_rq_depth;
+               ret = funcfg_table_elem->dw13.bs.cfg_rq_depth;
+               break;
        case QUEUE_NUM:
-               return funcfg_table_elem->dw13.bs.cfg_q_num;
+               ret = funcfg_table_elem->dw13.bs.cfg_q_num;
+               break;
        }
 
        kfree(read_data);
 
-       return ~0;
+       return ret;
 }
 
 static ssize_t hinic_dbg_cmd_read(struct file *filp, char __user *buffer, size_t count,