]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: avoid nul-deref trying to bind mp to incapable device
authorJakub Kicinski <kuba@kernel.org>
Sat, 4 Apr 2026 00:19:38 +0000 (17:19 -0700)
committerJakub Kicinski <kuba@kernel.org>
Wed, 8 Apr 2026 01:57:56 +0000 (18:57 -0700)
Sashiko points out that we use qops in __net_mp_open_rxq()
but never validate they are null. This was introduced when
check was moved from netdev_rx_queue_restart().

Look at ops directly instead of the locking config.
qops imply netdev_need_ops_lock(). We used netdev_need_ops_lock()
initially to signify that the real_num_rx_queues check below
is safe without rtnl_lock, but I'm not sure if this is actually
clear to most people, anyway.

Fixes: da7772a2b4ad ("net: move mp->rx_page_size validation to __net_mp_open_rxq()")
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Mina Almasry <almasrymina@google.com>
Link: https://patch.msgid.link/20260404001938.2425670-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/netdev_rx_queue.c

index 668a90658f25ad7e09a81a38f9b763f532d56eb7..05fd2875d72591483e99fffec56e84048c9f8e77 100644 (file)
@@ -117,7 +117,7 @@ int __net_mp_open_rxq(struct net_device *dev, unsigned int rxq_idx,
        struct netdev_rx_queue *rxq;
        int ret;
 
-       if (!netdev_need_ops_lock(dev))
+       if (!qops)
                return -EOPNOTSUPP;
 
        if (rxq_idx >= dev->real_num_rx_queues) {