From: sashiko-bot@kernel.org
To: "Wei Hu" <weh@linux.microsoft.com>
Cc: linux-rdma@vger.kernel.org, linux-hyperv@vger.kernel.org,
bpf@vger.kernel.org
Subject: Re: [PATCH net-next v7 03/13] net: mana: keep per-queue statistics in the port context
Date: Sat, 17 Oct 2026 15:39:24 +0000 [thread overview]
Message-ID: <sashiko-outbox-175603@kernel.org> (raw)
In-Reply-To: <b27034466c0db8228409db5473e747db7c3177c5.1791710735.git.weh@linux.microsoft.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] networking-core: RCU Use-After-Free of queue stats arrays in mana_remove
--
commit 18790cf70c36793724e3d46fb56949164d33f7af
Author: Long Li <longli@microsoft.com>
net: mana: keep per-queue statistics in the port context
Prepare port-lifetime RX/TX statistics before introducing live queue
replacement. Allocate max_queues slots before netdev registration,
unwind probe failures, and release them only after unregistering the
netdev.
> diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
> index 4b2c8039b8fa3..744d5ebe8dbbb 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_en.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
[ ... ]
> @@ -597,15 +597,15 @@ static void mana_get_stats64(struct net_device *ndev,
> struct rtnl_link_stats64 *st)
> {
> struct mana_port_context *apc = netdev_priv(ndev);
> - unsigned int num_queues = apc->num_queues;
> struct mana_stats_rx *rx_stats;
> struct mana_stats_tx *tx_stats;
> + unsigned int num_queues;
> unsigned int start;
> u64 packets, bytes;
> int q;
>
> - if (!apc->port_is_up)
> - return;
> + /* Report even while down; dev_get_stats() zeroes its output. */
> + num_queues = apc->max_queues;
>
> netdev_stats_to_stats64(st, &ndev->stats);
>
> @@ -615,7 +615,18 @@ static void mana_get_stats64(struct net_device *ndev,
> st->rx_missed_errors = apc->ac->hc_stats.hc_rx_discards_no_wqe;
>
> for (q = 0; q < num_queues; q++) {
> - rx_stats = &apc->rxqs[q]->stats;
> + rx_stats = &apc->rxq_stats[q];
> +
> + do {
> + start = u64_stats_fetch_begin(&rx_stats->syncp);
[ ... ]
> @@ -4525,6 +4591,7 @@ void mana_remove(struct gdma_dev *gd, bool suspending)
>
> unregister_netdevice(ndev);
> mana_cleanup_indir_table(apc);
> + mana_free_queue_stats(apc);
[Severity: High]
Is it possible for concurrent RCU readers to trigger a use-after-free of
the queue stats arrays here?
In mana_remove(), unregister_netdevice() unlists the device but does not
synchronously wait for existing RCU grace periods to finish. The necessary
synchronize_net() happens later in netdev_run_todo() after the lock is
released.
Because this patch removed the !apc->port_is_up safety check from
mana_get_stats64(), concurrent RCU readers that have already acquired the
ndev pointer can still call dev_get_stats() and unconditionally iterate and
dereference the apc->rxq_stats and apc->txq_stats array pointers.
If the arrays are freed by mana_free_queue_stats() while the reader is
inside mana_get_stats64(), it would result in memory corruption or crashes.
Does the mana_free_queue_stats() teardown need to be deferred until after the
RCU grace period, such as in the ndo_uninit or destructor callback?
--
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1791710735.git.weh@linux.microsoft.com?part=3
next prev parent reply other threads:[~2026-10-17 15:39 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 15:38 [PATCH net-next v7 00/13] net: mana: reconfigure by replacing the queue set Wei Hu
2026-10-16 15:38 ` [PATCH net-next v7 01/13] net: mana: add queue-set allocation and teardown helpers Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 02/13] net: mana: share the EQ pool across a queue-set swap Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 03/13] net: mana: keep per-queue statistics in the port context Wei Hu
2026-10-17 15:39 ` sashiko-bot [this message]
2026-10-16 15:38 ` [PATCH net-next v7 04/13] net: mana: swap queue sets in mana_set_channels Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 05/13] net: mana: swap queue sets in mana_set_ringparam Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 06/13] net: mana: swap queue sets in mana_set_priv_flags Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 07/13] net: mana: swap queue sets in mana_change_mtu Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 08/13] net: mana: swap queue sets in mana_xdp_set Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 09/13] net: mana: do not bail out of mana_detach on dealloc failure Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 10/13] net: mana: release EQs left idle by a channel-count reduction Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 11/13] net: mana: keep a user-configured RSS table across a queue rebuild Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 12/13] net: mana: keep the surviving queues when the channel count is reduced Wei Hu
2026-10-17 15:39 ` sashiko-bot
2026-10-16 15:38 ` [PATCH net-next v7 13/13] net: mana: keep the existing queues when the channel count is raised Wei Hu
2026-10-17 15:39 ` sashiko-bot
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=sashiko-outbox-175603@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=weh@linux.microsoft.com \
/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.