dpaa2-switch: Fix memory leak in dpaa2_switch_acl_entry_add() and dpaa2_switch_acl_en...
authorYuan Can <yuancan@huawei.com>
Mon, 5 Dec 2022 06:15:15 +0000 (06:15 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Wed, 7 Dec 2022 11:14:12 +0000 (12:14 +0100)
The cmd_buff needs to be freed when error happened in
dpaa2_switch_acl_entry_add() and dpaa2_switch_acl_entry_remove().

Fixes: 1110318d83e8 ("dpaa2-switch: add tc flower hardware offload on ingress traffic")
Signed-off-by: Yuan Can <yuancan@huawei.com>
Link: https://lore.kernel.org/r/20221205061515.115012-1-yuancan@huawei.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c

index cacd454ac696c90a0a27d3cf641b150e800ddda0..c39b866e2582d8ffe777467d2edf54deacc8c5a3 100644 (file)
@@ -132,6 +132,7 @@ int dpaa2_switch_acl_entry_add(struct dpaa2_switch_filter_block *filter_block,
                                                 DMA_TO_DEVICE);
        if (unlikely(dma_mapping_error(dev, acl_entry_cfg->key_iova))) {
                dev_err(dev, "DMA mapping failed\n");
+               kfree(cmd_buff);
                return -EFAULT;
        }
 
@@ -142,6 +143,7 @@ int dpaa2_switch_acl_entry_add(struct dpaa2_switch_filter_block *filter_block,
                         DMA_TO_DEVICE);
        if (err) {
                dev_err(dev, "dpsw_acl_add_entry() failed %d\n", err);
+               kfree(cmd_buff);
                return err;
        }
 
@@ -172,6 +174,7 @@ dpaa2_switch_acl_entry_remove(struct dpaa2_switch_filter_block *block,
                                                 DMA_TO_DEVICE);
        if (unlikely(dma_mapping_error(dev, acl_entry_cfg->key_iova))) {
                dev_err(dev, "DMA mapping failed\n");
+               kfree(cmd_buff);
                return -EFAULT;
        }
 
@@ -182,6 +185,7 @@ dpaa2_switch_acl_entry_remove(struct dpaa2_switch_filter_block *block,
                         DMA_TO_DEVICE);
        if (err) {
                dev_err(dev, "dpsw_acl_remove_entry() failed %d\n", err);
+               kfree(cmd_buff);
                return err;
        }