]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: fix the missing unlock for detached devices
authorJakub Kicinski <kuba@kernel.org>
Fri, 18 Apr 2025 01:53:17 +0000 (18:53 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 22 Apr 2025 00:10:49 +0000 (17:10 -0700)
The combined condition was left as is when we converted
from __dev_get_by_index() to netdev_get_by_index_lock().
There was no need to undo anything with the former, for
the latter we need an unlock.

Fixes: 1d22d3060b9b ("net: drop rtnl_lock for queue_mgmt operations")
Reviewed-by: Mina Almasry <almasrymina@google.com>
Link: https://patch.msgid.link/20250418015317.1954107-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/netdev-genl.c

index 5d7af50fe7027273881f4b0e384145b9d77168be..230743bdbb1407fdd4fde881b316fe17fd9d54bd 100644 (file)
@@ -861,14 +861,17 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
 
        mutex_lock(&priv->lock);
 
+       err = 0;
        netdev = netdev_get_by_index_lock(genl_info_net(info), ifindex);
-       if (!netdev || !netif_device_present(netdev)) {
+       if (!netdev) {
                err = -ENODEV;
                goto err_unlock_sock;
        }
-
-       if (!netdev_need_ops_lock(netdev)) {
+       if (!netif_device_present(netdev))
+               err = -ENODEV;
+       else if (!netdev_need_ops_lock(netdev))
                err = -EOPNOTSUPP;
+       if (err) {
                NL_SET_BAD_ATTR(info->extack,
                                info->attrs[NETDEV_A_DEV_IFINDEX]);
                goto err_unlock;