All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Jason Gunthorpe <jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Mark Bloch <markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Steve Wise
	<swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>,
	Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: [RFC PATCH rdma-next 06/14] RDMA/netlink: Protect device query from device removal
Date: Thu, 21 Dec 2017 20:17:40 +0200	[thread overview]
Message-ID: <20171221181748.17126-7-leon@kernel.org> (raw)
In-Reply-To: <20171221181748.17126-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>

There is a chance that device will be removed during device query
operations and it will cause to kernel panic in the flows which
doesn't hold lists_rwsem semaphore.

Fixes: e5c9469efcb1 ("RDMA/netlink: Add nldev device doit implementation")
Reviewed-by: Mark Bloch <markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Signed-off-by: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
 drivers/infiniband/core/nldev.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
index 2b631307349d..e3033d7a4029 100644
--- a/drivers/infiniband/core/nldev.c
+++ b/drivers/infiniband/core/nldev.c
@@ -141,36 +141,41 @@ static int nldev_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
 	struct ib_device *device;
 	struct sk_buff *msg;
 	u32 index;
-	int err;
+	int ret = -ENOMEM;

-	err = nlmsg_parse(nlh, 0, tb, RDMA_NLDEV_ATTR_MAX - 1,
+	ret = nlmsg_parse(nlh, 0, tb, RDMA_NLDEV_ATTR_MAX - 1,
 			  nldev_policy, extack);
-	if (err || !tb[RDMA_NLDEV_ATTR_DEV_INDEX])
+	if (ret || !tb[RDMA_NLDEV_ATTR_DEV_INDEX])
 		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(index);
 	if (!device)
 		return -EINVAL;

 	msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
 	if (!msg)
-		return -ENOMEM;
+		goto err;

 	nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq,
 			RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET),
 			0, 0);

-	err = fill_dev_info(msg, device);
-	if (err) {
-		nlmsg_free(msg);
-		return err;
-	}
+	ret = fill_dev_info(msg, device);
+	if (ret)
+		goto err_free;

 	nlmsg_end(msg, nlh);

+	put_device(&device->dev);
 	return rdma_nl_unicast(msg, NETLINK_CB(skb).portid);
+
+err_free:
+	nlmsg_free(msg);
+err:
+	put_device(&device->dev);
+	return ret;
 }

 static int _nldev_get_dumpit(struct ib_device *device,
--
2.15.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-12-21 18:17 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-21 18:17 [RFC PATCH rdma-next 00/14] RDMA resource tracking Leon Romanovsky
     [not found] ` <20171221181748.17126-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-12-21 18:17   ` [RFC PATCH rdma-next 01/14] RDMA/netlink: Simplify code of autoload modules Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 02/14] RDMA/core: Enforce requirement to hold lists_rwsem semaphore Leon Romanovsky
     [not found]     ` <20171221181748.17126-3-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-12-21 19:12       ` Jason Gunthorpe
     [not found]         ` <20171221191200.GE20015-uk2M96/98Pc@public.gmane.org>
2017-12-21 19:51           ` Leon Romanovsky
     [not found]             ` <20171221195134.GM2942-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-12-21 19:57               ` Leon Romanovsky
2017-12-21 20:23               ` Jason Gunthorpe
2017-12-21 18:17   ` [RFC PATCH rdma-next 03/14] RDMA/core: Replace open-coded variant of put_device Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 04/14] RDMA/nldev: Refactor nldev handle to be common function Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 05/14] RDMA/core: Provide locked variant of device name to index function Leon Romanovsky
2017-12-21 18:17   ` Leon Romanovsky [this message]
2017-12-21 18:17   ` [RFC PATCH rdma-next 07/14] RDMA/nldev: Protect port query from accidental device removal Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 08/14] RDMA/restrack: Add general infrastructure to track RDMA resources Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 09/14] RDMA/core: Add helper function to create named QPs Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 10/14] RDMA: Annotate create QP callers Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 11/14] RDMA/core: Add resource tracking for create and destroy CQs Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 12/14] RDMA/core: Add resource tracking for create and destroy PDs Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 13/14] RDMA/nldev: Provide global resource utilization Leon Romanovsky
2017-12-21 18:17   ` [RFC PATCH rdma-next 14/14] RDMA/nldev: Provide detailed QP information Leon Romanovsky
2017-12-21 18:21   ` [RFC PATCH rdma-next 00/14] RDMA resource tracking Leon Romanovsky
2017-12-21 19:14   ` Jason Gunthorpe
     [not found]     ` <20171221191424.GF20015-uk2M96/98Pc@public.gmane.org>
2017-12-21 19:52       ` Leon Romanovsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171221181748.17126-7-leon@kernel.org \
    --to=leon-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.