From: Stanislav Fomichev <stfomichev@gmail.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: davem@davemloft.net, netdev@vger.kernel.org, edumazet@google.com,
pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org,
syzkaller <syzkaller@googlegroups.com>,
Kuniyuki Iwashima <kuniyu@amazon.com>,
sdf@fomichev.me, jdamato@fastly.com, almasrymina@google.com
Subject: Re: [PATCH net-next v2] netdev: fix the locking for netdev notifications
Date: Mon, 14 Apr 2025 18:11:14 -0700 [thread overview]
Message-ID: <Z_2yMjGtbQ0ehtDN@mini-arch> (raw)
In-Reply-To: <20250414195903.574489-1-kuba@kernel.org>
On 04/14, Jakub Kicinski wrote:
> Kuniyuki reports that the assert for netdev lock fires when
> there are netdev event listeners (otherwise we skip the netlink
> event generation).
>
> Correct the locking when coming from the notifier.
>
> The NETDEV_XDP_FEAT_CHANGE notifier is already fully locked,
> it's the documentation that's incorrect.
>
> Fixes: 99e44f39a8f7 ("netdev: depend on netdev->lock for xdp features")
> Reported-by: syzkaller <syzkaller@googlegroups.com>
> Reported-by: Kuniyuki Iwashima <kuniyu@amazon.com>
> Link: https://lore.kernel.org/20250410171019.62128-1-kuniyu@amazon.com
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
> ---
> v2:
> - rebase vs net merge which brought in
> commit 04efcee6ef8d ("net: hold instance lock during NETDEV_CHANGE")
> v1: https://lore.kernel.org/20250411204629.128669-1-kuba@kernel.org
>
> CC: kuniyu@amazon.com
> CC: sdf@fomichev.me
> CC: jdamato@fastly.com
> CC: almasrymina@google.com
> ---
> Documentation/networking/netdevices.rst | 4 +++-
> include/linux/netdevice.h | 2 +-
> include/net/netdev_lock.h | 12 ++++++++++++
> net/core/lock_debug.c | 4 +++-
> net/core/netdev-genl.c | 4 ++++
> 5 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/networking/netdevices.rst b/Documentation/networking/netdevices.rst
> index f87bb55b4afe..a73a39b206e3 100644
> --- a/Documentation/networking/netdevices.rst
> +++ b/Documentation/networking/netdevices.rst
> @@ -387,12 +387,14 @@ For device drivers that implement shaping or queue management APIs,
> some of the notifiers (``enum netdev_cmd``) are running under the netdev
> instance lock.
>
> +The following netdev notifiers are always run under the instance lock:
> +* ``NETDEV_XDP_FEAT_CHANGE``
> +
> For devices with locked ops, currently only the following notifiers are
> running under the lock:
> * ``NETDEV_CHANGE``
> * ``NETDEV_REGISTER``
> * ``NETDEV_UP``
> -* ``NETDEV_XDP_FEAT_CHANGE``
>
> The following notifiers are running without the lock:
> * ``NETDEV_UNREGISTER``
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index e6036b82ef4c..0321fd952f70 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
> @@ -2520,7 +2520,7 @@ struct net_device {
> * @net_shaper_hierarchy, @reg_state, @threaded
> *
> * Double protects:
> - * @up, @moving_ns, @nd_net, @xdp_flags
> + * @up, @moving_ns, @nd_net, @xdp_features
> *
> * Double ops protects:
> * @real_num_rx_queues, @real_num_tx_queues
> diff --git a/include/net/netdev_lock.h b/include/net/netdev_lock.h
> index 5706835a660c..c63448b17f9e 100644
> --- a/include/net/netdev_lock.h
> +++ b/include/net/netdev_lock.h
> @@ -48,6 +48,18 @@ static inline void netdev_unlock_ops(struct net_device *dev)
> netdev_unlock(dev);
> }
>
> +static inline void netdev_lock_ops_to_full(struct net_device *dev)
> +{
> + if (!netdev_need_ops_lock(dev))
> + netdev_lock(dev);
Optional nit: I'm getting lost in all the helpers, I'd add the following here:
else
netdev_ops_assert_locked(dev);
Or maybe even:
if (netdev_need_ops_lock)
netdev_ops_assert_locked
else
netdev_lock
To express the constraints better.
next prev parent reply other threads:[~2025-04-15 1:11 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-14 19:59 [PATCH net-next v2] netdev: fix the locking for netdev notifications Jakub Kicinski
2025-04-15 1:11 ` Stanislav Fomichev [this message]
2025-04-15 14:53 ` Jakub Kicinski
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=Z_2yMjGtbQ0ehtDN@mini-arch \
--to=stfomichev@gmail.com \
--cc=almasrymina@google.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jdamato@fastly.com \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=syzkaller@googlegroups.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.