From: sashiko-bot@kernel.org
To: "Alex Elder" <elder@riscstar.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH net-next 11/12] misc: tc956x_pci: add TC956x/QPS615 support
Date: Sat, 02 May 2026 15:56:19 +0000 [thread overview]
Message-ID: <20260502155619.BCDFDC19425@smtp.kernel.org> (raw)
In-Reply-To: <20260501155421.3329862-12-elder@riscstar.com>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [High] Dangling `platform_data` pointer and stateless device link lead to Use-After-Free
- [High] Devres lifecycle violation causes memory leak of device links
- [High] Reference count leak of PCI peer device
- [High] Missing `pci_free_irq_vectors()` in error paths and remove function
--
commit 7eab7fd4b209226034d88bc445ad71c833dda6b7
Author: Alex Elder <elder@riscstar.com>
misc: tc956x_pci: add TC956x/QPS615 support
This commit introduces support for the Toshiba TC956x Ethernet AVB/TSN
bridge, configuring its PCI functions and creating auxiliary devices to
support the XGMAC interfaces.
diff --git a/drivers/misc/tc956x_pci.c b/drivers/misc/tc956x_pci.c
--- /dev/null
+++ b/drivers/misc/tc956x_pci.c
[ ... ]
> +static struct tc956x_chip *chip_get(struct pci_dev *pdev)
> +{
[ ... ]
> + /* Function 1 has to get the chip structure from function 0 */
> + peer = pci_get_slot(pdev->bus, PCI_DEVFN(PCI_SLOT(devfn), 0));
> + if (!peer)
> + return ERR_PTR(-ENXIO);
Does this leak the pci_dev reference count?
pci_get_slot() returns a device with its reference count incremented, but I
do not see a matching pci_dev_put(peer) in either the success path or when
returning -EPROBE_DEFER below.
> +
> + /* If function 0 hasn't set up the chip yet, try again later */
> + chip = dev_get_platdata(&peer->dev);
> + if (!chip)
> + return ERR_PTR(-EPROBE_DEFER);
> +
> + /* Mark function 1's device as dependent on function 0 */
> + link = device_link_add(dev, &peer->dev, DL_FLAG_STATELESS);
Is DL_FLAG_STATELESS safe to use here?
Stateless links do not enforce unbind ordering. If function 0 is unbound by
the user, its devres will free the chip structure and unmap the MMIO regions
while function 1 remains bound. Will function 1 cause a use-after-free if it
accesses the freed chip state or unmapped MMIO space?
> + if (!link)
> + return ERR_PTR(-ENODEV);
> +
> + ret = devm_add_action_or_reset(&peer->dev, chip_link_del, link);
Should this cleanup action be attached to dev (function 1) instead of
peer->dev (function 0)?
If function 1's probe fails downstream, its own devres list is rolled back,
but this cleanup action remains attached to function 0. Will this leak the
device link and accumulate duplicate devres actions on function 0 each time
function 1 defers its probe?
> + if (ret)
> + return ERR_PTR(ret);
> +
> + return chip;
> +}
[ ... ]
> +static int
> +tc956x_function_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> +{
[ ... ]
> + /* We called pcim_enable_device() so this will be freed automatically */
> + ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI);
> + if (ret < 1)
> + return dev_err_probe(dev, ret ? : -EIO,
> + "failed to allocate IRQ vectors\n");
Is this comment accurate?
According to PCI subsystem guidelines, pci_alloc_irq_vectors() requires
explicit manual cleanup. Should the error paths below and the remove function
call pci_free_irq_vectors(pdev) to prevent leaking system IRQ resources?
> +
> + ret = pci_irq_vector(pdev, 0);
> + if (ret < 1)
> + return dev_err_probe(dev, ret ? : -EIO, "failed to get IRQ\n");
> + msigen_irq = ret;
> +
> + ret = chip_init(chip, pdev);
> + if (ret)
> + return dev_err_probe(dev, ret, "failed to initialize chip\n");
> +
> + /* We're ready; the other function can now probe */
> + dev->platform_data = chip;
> +
> + ret = function_xgmac_adev_add(pdev, chip, msigen_irq);
> + if (ret)
> + return dev_err_probe(dev, ret, "failed to add xgmap device\n");
If function_xgmac_adev_add() fails, devm_kzalloc() will automatically free
the chip structure upon exit, but dev->platform_data is not cleared.
Will function 1's chip_get() retrieve this dangling pointer via
dev_get_platdata() and cause a use-after-free when it probes later?
> +
> + return 0;
> +}
> +
> +static void tc956x_function_remove(struct pci_dev *pdev)
> +{
> + struct tc956x_chip *chip = dev_get_platdata(&pdev->dev);
> +
> + pci_clear_master(pdev);
> +
> + if (&pdev->dev == chip->dev)
> + chip_msigen_disable(chip);
> +}
Does this function need a call to pci_free_irq_vectors(pdev) to clean up the
allocated IRQ vectors before returning?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260501155421.3329862-1-elder@riscstar.com?part=11
next prev parent reply other threads:[~2026-05-02 15:56 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-01 15:54 [PATCH net-next 00/12] net: enable TC956x support Alex Elder
2026-05-01 15:54 ` [PATCH net-next 01/12] net: pcs: pcs-xpcs-regmap: support XPCS memory-mapped MDIO bus via regmap Alex Elder
2026-05-02 15:56 ` sashiko-bot
2026-05-01 15:54 ` [PATCH net-next 02/12] net: pcs: pcs-xpcs: select operating mode for 10G-baseR capable PCS Alex Elder
2026-05-01 16:50 ` Andrew Lunn
2026-05-01 18:07 ` Alex Elder
2026-05-05 15:58 ` Daniel Thompson
2026-05-02 15:56 ` sashiko-bot
2026-05-01 15:54 ` [PATCH net-next 03/12] net: pcs: pcs-xpcs: Preserve BMCR_ANENBLE during link up Alex Elder
2026-05-01 17:06 ` Andrew Lunn
2026-05-06 9:46 ` Daniel Thompson
2026-05-02 15:56 ` sashiko-bot
2026-05-01 15:54 ` [PATCH net-next 04/12] net: stmmac: dma: create a separate dma_device pointer Alex Elder
2026-05-01 17:13 ` Andrew Lunn
2026-05-01 18:06 ` Alex Elder
2026-05-01 20:55 ` Andrew Lunn
2026-05-04 13:36 ` Alex Elder
2026-05-02 15:56 ` sashiko-bot
2026-05-01 15:54 ` [PATCH net-next 05/12] net: stmmac: dwxgmac2: Add multi MSI interrupt mode Alex Elder
2026-05-01 17:21 ` Andrew Lunn
2026-05-01 15:54 ` [PATCH net-next 06/12] net: stmmac: dwxgmac2: Add XGMAC 3.01a support Alex Elder
2026-05-01 15:54 ` [PATCH net-next 07/12] net: stmmac: dwxgmac2: export symbols for XGMAC 3.01a DMA Alex Elder
2026-05-02 15:56 ` sashiko-bot
2026-05-01 15:54 ` [PATCH net-next 08/12] dt-bindings: net: toshiba,tc965x-dwmac: add TC956x Ethernet bridge Alex Elder
2026-05-01 17:38 ` Andrew Lunn
2026-05-03 2:22 ` Alex Elder
2026-05-07 22:17 ` Alex Elder
2026-05-07 23:39 ` Rob Herring
2026-05-02 15:56 ` sashiko-bot
2026-05-07 19:02 ` Rob Herring
2026-05-08 14:36 ` Alex Elder
2026-05-04 11:00 ` Krzysztof Kozlowski
2026-05-04 13:34 ` Alex Elder
2026-05-07 14:47 ` Daniel Thompson
2026-05-07 14:12 ` Bjorn Andersson
2026-05-07 14:19 ` Andrew Lunn
2026-05-07 16:12 ` Bjorn Andersson
2026-05-07 18:37 ` Alex Elder
2026-05-10 2:25 ` Bjorn Andersson
2026-05-07 23:41 ` Rob Herring
2026-05-01 15:54 ` [PATCH net-next 09/12] gpio: tc956x: add TC956x/QPS615 support Alex Elder
2026-05-01 18:36 ` Andrew Lunn
2026-05-03 1:45 ` Alex Elder
2026-05-03 2:48 ` Andrew Lunn
2026-05-07 18:39 ` Alex Elder
2026-05-03 3:05 ` Andrew Lunn
2026-05-06 18:21 ` Alex Elder
2026-05-06 19:43 ` Andrew Lunn
2026-05-06 20:25 ` Alex Elder
2026-05-06 21:43 ` Andrew Lunn
2026-05-06 22:41 ` Alex Elder
2026-05-02 15:56 ` sashiko-bot
2026-05-03 3:42 ` Julian Braha
2026-05-06 18:51 ` Alex Elder
2026-05-04 12:46 ` Bartosz Golaszewski
2026-05-04 13:07 ` Alex Elder
2026-05-07 12:15 ` Linus Walleij
2026-05-07 12:20 ` Alex Elder
2026-05-01 15:54 ` [PATCH net-next 10/12] net: stmmac: " Alex Elder
2026-05-01 19:04 ` Andrew Lunn
2026-05-07 16:03 ` Daniel Thompson
2026-05-07 16:29 ` Andrew Lunn
2026-05-08 11:25 ` Daniel Thompson
2026-05-08 13:34 ` Andrew Lunn
2026-05-08 15:54 ` Daniel Thompson
2026-05-02 15:56 ` sashiko-bot
2026-05-05 16:38 ` Mohd Ayaan Anwar
2026-05-05 16:46 ` Alex Elder
2026-05-06 2:30 ` Xilin Wu
2026-05-06 17:44 ` Alex Elder
2026-05-07 13:57 ` Xilin Wu
2026-05-07 14:14 ` Andrew Lunn
2026-05-11 15:41 ` Daniel Thompson
2026-05-06 12:59 ` Xilin Wu
2026-05-06 14:19 ` Andrew Lunn
2026-05-06 14:35 ` Xilin Wu
2026-05-06 14:45 ` Andrew Lunn
2026-05-06 15:38 ` Xilin Wu
2026-05-06 15:39 ` Daniel Thompson
2026-05-06 15:44 ` Xilin Wu
2026-05-06 15:56 ` Andrew Lunn
2026-05-06 16:00 ` Xilin Wu
2026-05-06 15:28 ` Daniel Thompson
2026-05-06 19:52 ` Andrew Lunn
2026-05-07 18:44 ` Alex Elder
2026-05-08 13:09 ` Xilin Wu
2026-05-08 13:36 ` Andrew Lunn
2026-05-08 13:41 ` Xilin Wu
2026-05-01 15:54 ` [PATCH net-next 11/12] misc: tc956x_pci: " Alex Elder
2026-05-01 21:07 ` Andrew Lunn
2026-05-03 2:06 ` Alex Elder
2026-05-02 15:56 ` sashiko-bot [this message]
2026-05-02 16:45 ` Jakub Kicinski
2026-05-03 2:06 ` Alex Elder
2026-05-03 2:14 ` Jakub Kicinski
2026-05-03 2:23 ` Alex Elder
2026-05-01 15:54 ` [PATCH net-next 12/12] arm64: dts: qcom: qcs6490-rb3gen2: enable TC9564 with a single QCS8081 phy Alex Elder
2026-05-01 21:09 ` Andrew Lunn
2026-05-05 16:25 ` Daniel Thompson
2026-05-05 16:42 ` Mohd Ayaan Anwar
2026-05-05 16:46 ` Alex Elder
2026-05-08 14:03 ` Konrad Dybcio
2026-05-13 12:49 ` Daniel Thompson
2026-05-13 14:35 ` Andrew Lunn
2026-05-02 16:47 ` [PATCH net-next 00/12] net: enable TC956x support Jakub Kicinski
2026-05-03 2:07 ` Alex Elder
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=20260502155619.BCDFDC19425@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=elder@riscstar.com \
--cc=sashiko@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox