From: Eric Joyner <eric.joyner@amd.com>
To: netdev-bot+sashiko@kernel.org
Cc: netdev@vger.kernel.org, brett.creeley@amd.com,
andrew+netdev@lunn.ch, davem@davemloft.net, kuba@kernel.org,
pabeni@redhat.com, horms@kernel.org, nikhil.rao@amd.com,
vadim.fedorenko@linux.dev, edumazet@kernel.org
Subject: Re: [PATCH net v2 2/2] ionic: free port_info when probe fails after the port is set up
Date: Tue, 20 Oct 2026 19:13:31 -0700 [thread overview]
Message-ID: <98cabf4d-1088-4012-8636-7e26cd37d3ee@amd.com> (raw)
In-Reply-To: <179245202451.3135.14858672804771242161@kernel.org>
On 10/19/2026 4:20 PM, netdev-bot+sashiko@kernel.org wrote:
> [Some people who received this message don't often get email from netdev-bot+sashiko@kernel.org. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
>
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
>
>
> Thank you for your contribution! Sashiko AI review found 1 potential
> issue(s) to consider.
>
> Critical: 0 · High: 0 · Medium: 1 · Low: 0
>
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
>
> - [Medium] The new ionic_port_reset() call in ionic_probe()'s err_out_pci
> frees the port_info buffer with dma_free_coherent() even when the…
>
> --
>
> ionic: free port_info when probe fails after the port is set up
>
> This patch adds an ionic_port_reset() call at the err_out_pci label in
> ionic_probe(). The goal is to free the port_info DMA buffer that
> ionic_setup_one()->ionic_port_init() allocated when probe fails later.
> It follows the cleanup order already used in ionic_remove().
>
>> diff --git a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
>> index 05f19489ec5c8..68b3bceedd999 100644
>> --- a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
>> +++ b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
>> @@ -397,6 +397,7 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>> err_out_free_irqs:
>> ionic_bus_free_irq_vectors(ionic);
>> err_out_pci:
>> + ionic_port_reset(ionic);
>
> [Severity: Medium]
> Is it safe to free port_info here if the PORT_RESET command never
> completes?
>
> ionic_port_reset() sends the command, but the wait result does not
> decide whether the free happens:
>
> drivers/net/ethernet/pensando/ionic/ionic_main.c:ionic_port_reset() {
> ...
> if (ionic_is_fw_running(idev)) {
> mutex_lock(&ionic->dev_cmd_lock);
> ionic_dev_cmd_port_reset(idev);
> err = ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT);
> mutex_unlock(&ionic->dev_cmd_lock);
> }
>
> dma_free_coherent(ionic->dev, idev->port_info_sz,
> idev->port_info, idev->port_info_pa);
> ...
> }
>
> __ionic_dev_cmd_wait() can return -ETIMEDOUT while the firmware still
> reports that it is running:
>
> if (!done && !time_before(jiffies, max_wait)) {
> ionic_dev_cmd_clean(ionic);
> dev_warn(ionic->dev, "DEVCMD %s (%d) timeout after %ld secs\n",
> ionic_opcode_to_str(opcode), opcode, max_seconds);
> return -ETIMEDOUT;
> }
>
> ionic_dev_cmd_port_init() passed port_info_pa to the firmware through
> port_init.info_pa. The comment in ionic_get_link_ksettings() says the NIC
> updates this buffer by DMA on its own.
>
> Bus mastering, enabled by pci_set_master() in ionic_setup_one(), stays on
> until pci_disable_device() in ionic_clear_pci(). That runs only after
> ionic_dev_teardown().
>
> Take a probe failure like an adminq timeout in ionic_lif_init(). The
> firmware could be running but not answering dev-cmds. If it keeps writing
> port status into port_info during that window, can it DMA into pages that
> have already been freed and possibly reused?
>
> Before this patch, the buffer was leaked on this path instead of freed.
>
> The commit message says:
>
> the firmware gets a PORT_RESET before the buffer is freed, the same
> order as in ionic_remove().
>
> However, the command is only sent here, and its completion is never
> checked. ionic_remove() uses the same pattern, so this patch carries that
> convention over to the probe failure path.
>
> Should the free be skipped when the PORT_RESET wait fails? Alternatively,
> could it be deferred until bus mastering has been disabled?
>
>> ionic_dev_teardown(ionic);
>> ionic_clear_pci(ionic);
>> ionic_debugfs_del_dev(ionic);
>
> --
> Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261015-ionic-port-info-lifetime-v2-0-57232013fd79%40amd.com
Hi netdev's Sashiko Bot,
This finding is that this invites a change to cleanup handling in ionic that is
outside the scope of the patch; this patch does attempt to slightly clean up
things by changing a leak to a proper free while tearing down the driver after a
failure in probe, but it is valid that the device could still write into the
freed memory if that cleanup also has a failure.
I think a proper fix could be patterned after Nikhil's patch in 6443f4f20bda
("pds_core: quiesce DMA before freeing resources"), but that was applied to
net-next:
https://lore.kernel.org/all/178096501514.1726280.11716563786761485251.git-patchwork-notify@kernel.org/
- Eric
next prev parent reply other threads:[~2026-10-21 2:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 23:03 [PATCH net v2 0/2] ionic: fix port_info lifetime bugs Eric Joyner
2026-10-15 23:03 ` [PATCH net v2 1/2] ionic: fix port_info use-after-free on firmware recovery Eric Joyner
2026-10-16 11:17 ` Vadim Fedorenko
2026-10-15 23:03 ` [PATCH net v2 2/2] ionic: free port_info when probe fails after the port is set up Eric Joyner
2026-10-16 11:34 ` Vadim Fedorenko
2026-10-19 23:20 ` netdev-bot+sashiko
2026-10-21 2:13 ` Eric Joyner [this message]
2026-10-15 23:08 ` [PATCH net v2 0/2] ionic: fix port_info lifetime bugs netdev-bot+sinfo
2026-10-15 23:56 ` Eric Joyner
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=98cabf4d-1088-4012-8636-7e26cd37d3ee@amd.com \
--to=eric.joyner@amd.com \
--cc=andrew+netdev@lunn.ch \
--cc=brett.creeley@amd.com \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev-bot+sashiko@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nikhil.rao@amd.com \
--cc=pabeni@redhat.com \
--cc=vadim.fedorenko@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