Skip to content

Commit e11a9ad

Browse files
andy-shevlag-linaro
authored andcommitted
mfd: ls2kbmc: Fully convert to use managed resources
The mixing of managed and non-managed resources may lead to possible use-after-free bugs. In this driver the problematic part is the device functionality that may just have gone behind the functions back, e.g., when interrupt is being served. Fix this by switching to managed resources for PCI. Fixes: 91a3e1f ("mfd: ls2kbmc: Check for devm_mfd_add_devices() failure") Fixes: d952bba ("mfd: ls2kbmc: Add Loongson-2K BMC reset function support") Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Binbin Zhou <zhoubinbin@loongson.cn> Link: https://patch.msgid.link/20251030113735.3741913-2-andriy.shevchenko@linux.intel.com Signed-off-by: Lee Jones <lee@kernel.org>
1 parent 71ae8ab commit e11a9ad

1 file changed

Lines changed: 9 additions & 27 deletions

File tree

drivers/mfd/ls2k-bmc-core.c

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -464,53 +464,36 @@ static int ls2k_bmc_probe(struct pci_dev *dev, const struct pci_device_id *id)
464464
resource_size_t base;
465465
int ret;
466466

467-
ret = pci_enable_device(dev);
467+
ret = pcim_enable_device(dev);
468468
if (ret)
469469
return ret;
470470

471471
ddata = devm_kzalloc(&dev->dev, sizeof(*ddata), GFP_KERNEL);
472-
if (!ddata) {
473-
ret = -ENOMEM;
474-
goto disable_pci;
475-
}
472+
if (!ddata)
473+
return -ENOMEM;
476474

477475
ddata->dev = &dev->dev;
478476

479477
ret = ls2k_bmc_init(ddata);
480478
if (ret)
481-
goto disable_pci;
479+
return ret;
482480

483481
ret = ls2k_bmc_parse_mode(dev, &pd);
484482
if (ret)
485-
goto disable_pci;
483+
return ret;
486484

487485
ls2k_bmc_cells[LS2K_BMC_DISPLAY].platform_data = &pd;
488486
ls2k_bmc_cells[LS2K_BMC_DISPLAY].pdata_size = sizeof(pd);
489487
base = dev->resource[0].start + LS2K_DISPLAY_RES_START;
490488

491489
/* Remove conflicting efifb device */
492490
ret = aperture_remove_conflicting_devices(base, SZ_4M, "simple-framebuffer");
493-
if (ret) {
494-
dev_err(&dev->dev, "Failed to removed firmware framebuffers: %d\n", ret);
495-
goto disable_pci;
496-
}
497-
498-
ret = devm_mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO,
499-
ls2k_bmc_cells, ARRAY_SIZE(ls2k_bmc_cells),
500-
&dev->resource[0], 0, NULL);
501491
if (ret)
502-
goto disable_pci;
492+
return dev_err_probe(&dev->dev, ret, "Failed to removed firmware framebuffers\n");
503493

504-
return 0;
505-
506-
disable_pci:
507-
pci_disable_device(dev);
508-
return ret;
509-
}
510-
511-
static void ls2k_bmc_remove(struct pci_dev *dev)
512-
{
513-
pci_disable_device(dev);
494+
return devm_mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO,
495+
ls2k_bmc_cells, ARRAY_SIZE(ls2k_bmc_cells),
496+
&dev->resource[0], 0, NULL);
514497
}
515498

516499
static struct pci_device_id ls2k_bmc_devices[] = {
@@ -523,7 +506,6 @@ static struct pci_driver ls2k_bmc_driver = {
523506
.name = "ls2k-bmc",
524507
.id_table = ls2k_bmc_devices,
525508
.probe = ls2k_bmc_probe,
526-
.remove = ls2k_bmc_remove,
527509
};
528510
module_pci_driver(ls2k_bmc_driver);
529511

0 commit comments

Comments
 (0)