* Caller must perform ib_device_put() to return the device reference count
  * when ib_device_get_by_index() returns valid device pointer.
  */
-struct ib_device *ib_device_get_by_index(u32 index)
+struct ib_device *ib_device_get_by_index(const struct net *net, u32 index)
 {
        struct ib_device *device;
 
        down_read(&devices_rwsem);
        device = xa_load(&devices, index);
        if (device) {
+               if (!rdma_dev_access_netns(device, net)) {
+                       device = NULL;
+                       goto out;
+               }
+
                if (!ib_device_try_get(device))
                        device = NULL;
        }
+out:
        up_read(&devices_rwsem);
        return device;
 }
 
        down_read(&devices_rwsem);
        xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {
+               if (!rdma_dev_access_netns(dev, sock_net(skb->sk)))
+                       continue;
+
                ret = nldev_cb(dev, skb, cb, idx);
                if (ret)
                        break;
 
 
        index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
 
-       device = ib_device_get_by_index(index);
+       device = ib_device_get_by_index(sock_net(skb->sk), index);
        if (!device)
                return -EINVAL;
 
                return -EINVAL;
 
        index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
-       device = ib_device_get_by_index(index);
+       device = ib_device_get_by_index(sock_net(skb->sk), index);
        if (!device)
                return -EINVAL;
 
 {
        /*
         * There is no need to take lock, because
-        * we are relying on ib_core's lists_rwsem
+        * we are relying on ib_core's locking.
         */
        return ib_enum_all_devs(_nldev_get_dumpit, skb, cb);
 }
                return -EINVAL;
 
        index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
-       device = ib_device_get_by_index(index);
+       device = ib_device_get_by_index(sock_net(skb->sk), index);
        if (!device)
                return -EINVAL;
 
                return -EINVAL;
 
        ifindex = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
-       device = ib_device_get_by_index(ifindex);
+       device = ib_device_get_by_index(sock_net(skb->sk), ifindex);
        if (!device)
                return -EINVAL;
 
                return -EINVAL;
 
        index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
-       device = ib_device_get_by_index(index);
+       device = ib_device_get_by_index(sock_net(skb->sk), index);
        if (!device)
                return -EINVAL;
 
                return -EINVAL;
 
        index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
-       device = ib_device_get_by_index(index);
+       device = ib_device_get_by_index(sock_net(skb->sk), index);
        if (!device)
                return -EINVAL;
 
                return -EINVAL;
 
        index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
-       device = ib_device_get_by_index(index);
+       device = ib_device_get_by_index(sock_net(skb->sk), index);
        if (!device)
                return -EINVAL;
 
                return -EINVAL;
 
        index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
-       device = ib_device_get_by_index(index);
+       device = ib_device_get_by_index(sock_net(skb->sk), index);
        if (!device)
                return -EINVAL;