From: Weiming Shi <bestswngs@gmail.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: Jiri Pirko <jiri@resnulli.us>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
netdev@vger.kernel.org, Xiang Mei <xmei5@asu.edu>
Subject: Re: [PATCH net v2] net: team: fix NULL pointer dereference in team_xmit during mode change
Date: Wed, 20 May 2026 14:14:10 +0800 [thread overview]
Message-ID: <ag1PTfcsbowK68g5@Air.local> (raw)
In-Reply-To: <20260519162145.524da69e@kernel.org>
On 26-05-19 16:21, Jakub Kicinski wrote:
> On Tue, 19 May 2026 16:51:28 +0800 Weiming Shi wrote:
> > On 26-05-18 14:22, Jakub Kicinski wrote:
> > > On Mon, 18 May 2026 17:51:54 +0800 Weiming Shi wrote:
> > > > On 26-05-10 09:59, Jakub Kicinski wrote:
> > > > Apologies for the late reply and for rushing v3.
> > > >
> > > > I was muddling two things. On teardown synchronize_net() is the protection,
> > > > the release/acquire is for the setup path where init() writes
> > > > mode_priv before team_adjust_ops() publishes the handler.
> > > >
> > > > If that makes sense I'll send v4 with the corrected commit message.
> > >
> > > Can you provide more details for the init() path race?
> > > What's the sequence of events?
> >
> > With loadbalance mode:
> >
> > lb_init() stores select_tx_port_func (team_mode_loadbalance.c:595).
> > When a port is later enabled, team_adjust_ops() publishes
> > lb_transmit with a plain store (team_core.c:539).
> >
> > Without the release/acquire, a concurrent team_xmit() on a weakly-ordered
> > arch can see lb_transmit but not the select_tx_port_func store, and lb_transmit
> > dereferences it at line 227.
> >
> > I'll send a PoC in the next mail so you can reproduce it.
>
> Not sure this is enough. But feel free to send the v3 if you prefer.
>
> From looking at the repro it seems like you never add any ports?
> I suspect that the author of this code assumed that if there are
> no ports there must be no traffic, so it's safe to be flipping the
> modes. I'd rather prevent the race than make it safe. Could we defer
> setting the real handler until after the first port is added?
The next version will drops the release/acquire and replaces memset/memcpy
with per-field updates that skip transmit/receive entirely. They stay as dummies
throughout mode change since team_adjust_ops() already handles them based on port count.
WRITE_ONCE/READ_ONCE for tearing, synchronize_net() before exit_op() to drain old readers.
Does that match what you had in mind, or would you prefer a different structure?
next prev parent reply other threads:[~2026-05-20 6:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-09 18:18 [PATCH net v2] net: team: fix NULL pointer dereference in team_xmit during mode change Weiming Shi
2026-05-10 15:25 ` Jakub Kicinski
2026-05-10 16:06 ` Weiming Shi
2026-05-10 16:59 ` Jakub Kicinski
2026-05-18 9:51 ` Weiming Shi
2026-05-18 21:22 ` Jakub Kicinski
2026-05-19 8:51 ` Weiming Shi
2026-05-19 23:21 ` Jakub Kicinski
2026-05-20 6:14 ` Weiming Shi [this message]
2026-05-20 22:20 ` Jakub Kicinski
2026-05-21 8:21 ` Weiming Shi
2026-05-19 8:57 ` Weiming Shi
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=ag1PTfcsbowK68g5@Air.local \
--to=bestswngs@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=xmei5@asu.edu \
/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.