From 48a880a19079af7e4f071820e447514d6079d381 Mon Sep 17 00:00:00 2001 From: coolsnowwolf Date: Mon, 5 Jul 2021 18:01:22 +0800 Subject: [PATCH] ath11k: fixes a memory leak as the MHI controller was allocated but never freed --- ...-to-allocate-and-free-MHI-controller.patch | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 package/kernel/mac80211/patches/ath11k/200-ath11k-use-MHI-provided-APIs-to-allocate-and-free-MHI-controller.patch diff --git a/package/kernel/mac80211/patches/ath11k/200-ath11k-use-MHI-provided-APIs-to-allocate-and-free-MHI-controller.patch b/package/kernel/mac80211/patches/ath11k/200-ath11k-use-MHI-provided-APIs-to-allocate-and-free-MHI-controller.patch new file mode 100644 index 000000000..dc3d2ccd9 --- /dev/null +++ b/package/kernel/mac80211/patches/ath11k/200-ath11k-use-MHI-provided-APIs-to-allocate-and-free-MHI-controller.patch @@ -0,0 +1,39 @@ +diff --git a/drivers/net/wireless/ath/ath11k/mhi.c b/drivers/net/wireless/ath/ath11k/mhi.c +index aded9a7..1c9d9dc 100644 +--- a/drivers/net/wireless/ath/ath11k/mhi.c ++++ b/drivers/net/wireless/ath/ath11k/mhi.c +@@ -218,7 +218,7 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci) + struct mhi_controller *mhi_ctrl; + int ret; + +- mhi_ctrl = kzalloc(sizeof(*mhi_ctrl), GFP_KERNEL); ++ mhi_ctrl = mhi_alloc_controller(); + if (!mhi_ctrl) + return -ENOMEM; + +@@ -234,7 +234,7 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci) + ret = ath11k_mhi_get_msi(ab_pci); + if (ret) { + ath11k_err(ab, "failed to get msi for mhi\n"); +- kfree(mhi_ctrl); ++ mhi_free_controller(mhi_ctrl); + return ret; + } + +@@ -252,7 +252,7 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci) + ret = mhi_register_controller(mhi_ctrl, &ath11k_mhi_config); + if (ret) { + ath11k_err(ab, "failed to register to mhi bus, err = %d\n", ret); +- kfree(mhi_ctrl); ++ mhi_free_controller(mhi_ctrl); + return ret; + } + +@@ -265,6 +265,7 @@ void ath11k_mhi_unregister(struct ath11k_pci *ab_pci) + + mhi_unregister_controller(mhi_ctrl); + kfree(mhi_ctrl->irq); ++ mhi_free_controller(mhi_ctrl); + } + + static char *ath11k_mhi_state_to_str(enum ath11k_mhi_state mhi_state)