Make sure that the requested net_device is not already associated with an ib_device before trying to create a new ib_device that will be associated with the same net_device, this is needed to avoid creating siw and rxe devices that will be associated with the same net_device. Fixes: 3856ec4b93c9 ("RDMA/core: Add RDMA_NLDEV_CMD_NEWLINK/DELLINK support") Signed-off-by: Kamal Heib <kheib@xxxxxxxxxx> --- drivers/infiniband/core/nldev.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c index a981ac2f0975..376c9e158556 100644 --- a/drivers/infiniband/core/nldev.c +++ b/drivers/infiniband/core/nldev.c @@ -1696,6 +1696,7 @@ static int nldev_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, const struct rdma_link_ops *ops; char ndev_name[IFNAMSIZ]; struct net_device *ndev; + struct ib_device *ibdev; char type[IFNAMSIZ]; int err; @@ -1718,6 +1719,12 @@ static int nldev_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, if (!ndev) return -ENODEV; + ibdev = ib_device_get_by_netdev(ndev, RDMA_DRIVER_UNKNOWN); + if (ibdev) { + ib_device_put(ibdev); + return -EINVAL; + } + down_read(&link_ops_rwsem); ops = link_ops_get(type); #ifdef CONFIG_MODULES -- 2.38.1