All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Zhijian Han" <hanzhijian1991@gmail.com>
Cc: imx@lists.linux.dev, linux-pci@vger.kernel.org, Frank.Li@kernel.org
Subject: Re: [PATCH v2] PCI: imx6: fix endpoint init error handling
Date: Tue, 25 Aug 2026 06:21:29 +0000	[thread overview]
Message-ID: <20260825062130.3D0BC1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260825060340.3767635-1-hanzhijian1991@gmail.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but there is a double-free of eDMA resources in the error path of dw_pcie_ep_init_registers().
--

--- Patch [1]: [PATCH v2] PCI: imx6: fix endpoint init error handling ---
commit 7a1537796f53756a148ff0c98174d765555b3298
Author: Zhijian Han <hanzhijian1991@gmail.com>

PCI: imx6: fix endpoint init error handling

This commit addresses unhandled errors from imx_pcie_host_init() during
endpoint initialization, preventing the driver from operating on unpowered
hardware. It also registers imx_pcie_host_exit() via the devres framework
to ensure host resources are properly released if subsequent initialization
steps fail.

Link: https://lore.kernel.org/all/20260824152857.DB9771F00A3D@smtp.kernel.org/

> diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
> index 39790e66b98dc..f0fb4e1b0ac6b 100644
> --- a/drivers/pci/controller/dwc/pci-imx6.c
> +++ b/drivers/pci/controller/dwc/pci-imx6.c

[ ... ]

> @@ -1634,7 +1639,20 @@ static int imx_add_pcie_ep(struct imx_pcie *imx_pcie,
>  	struct dw_pcie_rp *pp = &pci->pp;
>  	struct device *dev = pci->dev;
>  
> -	imx_pcie_host_init(pp);
> +	ret = imx_pcie_host_init(pp);
> +	if (ret)
> +		return ret;
> +
> +	/*
> +	 * Tear the host resources down via a devm action so that, on probe
> +	 * failure, the EPC device created by dw_pcie_ep_init() is
> +	 * unregistered (also via devres) before the clocks, regulators and
> +	 * PHY are switched off.
> +	 */
> +	ret = devm_add_action_or_reset(dev, imx_pcie_host_exit_action, pp);
> +	if (ret)
> +		return ret;
> +
>  	ep = &pci->ep;
>  	ep->ops = &pcie_ep_ops;
>  

[Severity: High]
This isn't a bug introduced by this patch, but could the error handling
further down in imx_add_pcie_ep() cause a double-free of eDMA resources?

drivers/pci/controller/dwc/pci-imx6.c:imx_add_pcie_ep() {
    ...
	ret = dw_pcie_ep_init_registers(ep);
	if (ret) {
		dev_err(dev, "Failed to initialize DWC endpoint registers\n");
		dw_pcie_ep_deinit(ep);
		return ret;
	}
    ...
}

If dw_pcie_ep_init_registers() fails after dw_pcie_edma_detect() succeeds,
it handles the error by jumping to err_remove_edma:

drivers/pci/controller/dwc/pcie-designware-ep.c:dw_pcie_ep_init_registers() {
    ...
err_remove_edma:
	dw_pcie_edma_remove(pci);

	return ret;
}

When this error is returned to imx_add_pcie_ep(), it unconditionally calls
dw_pcie_ep_deinit(), which in turn calls dw_pcie_ep_cleanup() and executes
dw_pcie_edma_remove() a second time.

Since dw_edma_remove() doesn't nullify the chip->dw pointer after freeing
IRQs and unregistering the DMA device, does this second call attempt to free
the same resources again, potentially leading to a use-after-free, kernel
crash, or refcount underflow?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260825060340.3767635-1-hanzhijian1991@gmail.com?part=1

  reply	other threads:[~2026-08-25  6:21 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-25  6:03 [PATCH v2] PCI: imx6: fix endpoint init error handling Zhijian Han
2026-08-25  6:21 ` sashiko-bot [this message]
2026-08-25 13:46 ` Markus Elfring
2026-08-25 14:19 ` Frank Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260825062130.3D0BC1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=hanzhijian1991@gmail.com \
    --cc=imx@lists.linux.dev \
    --cc=linux-pci@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.