platform/x86: amd-pmc: put device on error paths
authorPan Bian <bianpan2016@163.com>
Thu, 21 Jan 2021 04:50:05 +0000 (20:50 -0800)
committerHans de Goede <hdegoede@redhat.com>
Tue, 2 Feb 2021 18:33:44 +0000 (19:33 +0100)
Put the PCI device rdev on error paths to fix potential reference count
leaks.

Signed-off-by: Pan Bian <bianpan2016@163.com>
Link: https://lore.kernel.org/r/20210121045005.73342-1-bianpan2016@163.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/amd-pmc.c

index ef83425..b9da58e 100644 (file)
@@ -210,31 +210,39 @@ static int amd_pmc_probe(struct platform_device *pdev)
        dev->dev = &pdev->dev;
 
        rdev = pci_get_domain_bus_and_slot(0, 0, PCI_DEVFN(0, 0));
-       if (!rdev || !pci_match_id(pmc_pci_ids, rdev))
+       if (!rdev || !pci_match_id(pmc_pci_ids, rdev)) {
+               pci_dev_put(rdev);
                return -ENODEV;
+       }
 
        dev->cpu_id = rdev->device;
        err = pci_write_config_dword(rdev, AMD_PMC_SMU_INDEX_ADDRESS, AMD_PMC_BASE_ADDR_LO);
        if (err) {
                dev_err(dev->dev, "error writing to 0x%x\n", AMD_PMC_SMU_INDEX_ADDRESS);
+               pci_dev_put(rdev);
                return pcibios_err_to_errno(err);
        }
 
        err = pci_read_config_dword(rdev, AMD_PMC_SMU_INDEX_DATA, &val);
-       if (err)
+       if (err) {
+               pci_dev_put(rdev);
                return pcibios_err_to_errno(err);
+       }
 
        base_addr_lo = val & AMD_PMC_BASE_ADDR_HI_MASK;
 
        err = pci_write_config_dword(rdev, AMD_PMC_SMU_INDEX_ADDRESS, AMD_PMC_BASE_ADDR_HI);
        if (err) {
                dev_err(dev->dev, "error writing to 0x%x\n", AMD_PMC_SMU_INDEX_ADDRESS);
+               pci_dev_put(rdev);
                return pcibios_err_to_errno(err);
        }
 
        err = pci_read_config_dword(rdev, AMD_PMC_SMU_INDEX_DATA, &val);
-       if (err)
+       if (err) {
+               pci_dev_put(rdev);
                return pcibios_err_to_errno(err);
+       }
 
        base_addr_hi = val & AMD_PMC_BASE_ADDR_LO_MASK;
        pci_dev_put(rdev);