common/iavf: fix ARQ resource leak
authorQiming Chen <chenqiming_huawei@163.com>
Fri, 10 Sep 2021 03:12:49 +0000 (11:12 +0800)
committerQi Zhang <qi.z.zhang@intel.com>
Tue, 28 Sep 2021 03:33:44 +0000 (05:33 +0200)
In the iavf_init_arq function, if an exception occurs in the
iavf_config_arq_regs function, and the previously applied ARQ (Admin
Receive Queue) bufs resource is released. This patch maintains the same
modification as the iavf_init_asq function to roll back resources.

Fixes: 87aca6d8d8a4 ("net/iavf/base: fix command buffer memory leak")
Cc: stable@dpdk.org
Signed-off-by: Qiming Chen <chenqiming_huawei@163.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
drivers/common/iavf/iavf_adminq.c

index 0bf5af0..9c36e89 100644 (file)
@@ -417,7 +417,7 @@ enum iavf_status iavf_init_arq(struct iavf_hw *hw)
        /* initialize base registers */
        ret_code = iavf_config_arq_regs(hw);
        if (ret_code != IAVF_SUCCESS)
-               goto init_adminq_free_rings;
+               goto init_config_regs;
 
        /* success! */
        hw->aq.arq.count = hw->aq.num_arq_entries;
@@ -425,6 +425,10 @@ enum iavf_status iavf_init_arq(struct iavf_hw *hw)
 
 init_adminq_free_rings:
        iavf_free_adminq_arq(hw);
+       return ret_code;
+
+init_config_regs:
+       iavf_free_arq_bufs(hw);
 
 init_adminq_exit:
        return ret_code;