Re: [PATCH net-next 1/8] net: avoid potential race between netdev_get_by_index_lock() and netns switch

Joe Damato
2025-04-08T02:40:24Z

On Mon, Apr 07, 2025 at 12:01:10PM -0700, Jakub Kicinski wrote:
> netdev_get_by_index_lock() performs following steps:
>
> rcu_lock();
> dev = lookup(netns, ifindex);
> dev_get(dev);
> rcu_unlock();
> [... lock & validate the dev ...]
> return dev
>
> Validation right now only checks if the device is registered but since
> the lookup is netns-aware we must also protect against the device
> switching netns right after we dropped the RCU lock. Otherwise
> the caller in netns1 may get a pointer to a device which has just
> switched to netns2.
>
> We can't hold the lock for the entire netns change process (because of
> the NETDEV_UNREGISTER notifier), and there's no existing marking to
> indicate that the netns is unlisted because of netns move, so add one.
>
> AFAIU none of the existing netdev_get_by_index_lock() callers can
> suffer from this problem (NAPI code double checks the netns membership
> and other callers are either under rtnl_lock or not ns-sensitive),
> so this patch does not have to be treated as a fix.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> include/linux/netdevice.h | 6 +++++-
> net/core/dev.h | 2 +-
> net/core/dev.c | 25 ++++++++++++++++++-------
> 3 files changed, 24 insertions(+), 9 deletions(-)

Reviewed-by: Joe Damato <jdamato@fastly.com>