Re: [PATCH v2 2/2] PCI: dwc: rcar-gen4: Use .post_deinit to handle dw_pcie_ep_init() failures
| Newsgroups | org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <[email protected]> |
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: Pre-existing issues: - [High] Missing early return in dw_pcie_ep_init_registers() error path causes EPC to be incorrectly notified as ready. -- --- Patch [2]: [PATCH v2 2/2] PCI: dwc: rcar-gen4: Use .post_deinit to handle dw_pcie_ep_init() failures --- commit 6071cb241e93cb3a6592fddfd5caeb02f9e49fac Author: Marek Vasut <[email protected]> PCI: dwc: rcar-gen4: Use .post_deinit to handle dw_pcie_ep_init() failures Implement the .post_deinit() callback in R-Car Gen4 to cleanly stop clocks and assert resets if endpoint initialization fails. This prevents duplicate cleanup attempts by removing explicit deinit calls from the error paths. > diff --git a/drivers/pci/controller/dwc/pcie-rcar-gen4.c b/drivers/pci/controller/dwc/pcie-rcar-gen4.c > --- a/drivers/pci/controller/dwc/pcie-rcar-gen4.c > +++ b/drivers/pci/controller/dwc/pcie-rcar-gen4.c [ ... ] > @@ -570,16 +576,13 @@ static int rcar_gen4_add_dw_pcie_ep(struct rcar_gen4_pcie *rcar) > ep->ops = &pcie_ep_ops; > > ret = dw_pcie_ep_init(ep); > - if (ret) { > - rcar_gen4_pcie_ep_deinit(rcar); > + if (ret) > return ret; > - } > > ret = dw_pcie_ep_init_registers(ep); > if (ret) { > dev_err(dev, "Failed to initialize DWC endpoint registers\n"); > dw_pcie_ep_deinit(ep); > - rcar_gen4_pcie_ep_deinit(rcar); > } [Severity: High] This is a pre-existing issue, but does this error path fall through and incorrectly notify the EPC framework? If dw_pcie_ep_init_registers() fails in rcar_gen4_add_dw_pcie_ep(), the code de-initializes the endpoint via dw_pcie_ep_deinit(), but seems to miss a return statement. It will unconditionally fall through and call pci_epc_init_notify(ep->epc). Could this cause bound Endpoint Function (EPF) drivers to receive an initialization complete notification on a disabled controller, potentially leading to an asynchronous external abort (SError) or kernel panic when they attempt memory mapping and register accesses? > > pci_epc_init_notify(ep->epc); -- Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=2