| From 90d5e28c5cd8fb9b955e16008b1c98000430f00f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 31 May 2021 17:41:28 +0300 |
| Subject: ath10k: add missing error return code in ath10k_pci_probe() |
| |
| From: Yang Yingliang <yangyingliang@huawei.com> |
| |
| [ Upstream commit e2783e2f39ba99178dedfc1646d5cc0979d1bab3 ] |
| |
| When chip_id is not supported, the resources will be freed |
| on path err_unsupported, these resources will also be freed |
| when calling ath10k_pci_remove(), it will cause double free, |
| so return -ENODEV when it doesn't support the device with wrong |
| chip_id. |
| |
| Fixes: c0c378f9907c ("ath10k: remove target soc ps code") |
| Fixes: 7505f7c3ec1d ("ath10k: create a chip revision whitelist") |
| Fixes: f8914a14623a ("ath10k: restore QCA9880-AR1A (v1) detection") |
| Reported-by: Hulk Robot <hulkci@huawei.com> |
| Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Link: https://lore.kernel.org/r/20210522105822.1091848-3-yangyingliang@huawei.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/ath/ath10k/pci.c | 12 +++++++++--- |
| 1 file changed, 9 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c |
| index 55f483d22b6d..86f52bcb3e4d 100644 |
| --- a/drivers/net/wireless/ath/ath10k/pci.c |
| +++ b/drivers/net/wireless/ath/ath10k/pci.c |
| @@ -3684,8 +3684,10 @@ static int ath10k_pci_probe(struct pci_dev *pdev, |
| ath10k_pci_soc_read32(ar, SOC_CHIP_ID_ADDRESS); |
| if (bus_params.chip_id != 0xffffffff) { |
| if (!ath10k_pci_chip_is_supported(pdev->device, |
| - bus_params.chip_id)) |
| + bus_params.chip_id)) { |
| + ret = -ENODEV; |
| goto err_unsupported; |
| + } |
| } |
| } |
| |
| @@ -3696,11 +3698,15 @@ static int ath10k_pci_probe(struct pci_dev *pdev, |
| } |
| |
| bus_params.chip_id = ath10k_pci_soc_read32(ar, SOC_CHIP_ID_ADDRESS); |
| - if (bus_params.chip_id == 0xffffffff) |
| + if (bus_params.chip_id == 0xffffffff) { |
| + ret = -ENODEV; |
| goto err_unsupported; |
| + } |
| |
| - if (!ath10k_pci_chip_is_supported(pdev->device, bus_params.chip_id)) |
| + if (!ath10k_pci_chip_is_supported(pdev->device, bus_params.chip_id)) { |
| + ret = -ENODEV; |
| goto err_unsupported; |
| + } |
| |
| ret = ath10k_core_register(ar, &bus_params); |
| if (ret) { |
| -- |
| 2.30.2 |
| |