[lkml]   [2017]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH 4.14 158/164] nvmet-rdma: update queue list during ib_device removal
4.14-stable review patch.  If anyone has any objections, please let me know.


From: Israel Rukshin <>

[ Upstream commit 43b92fd27aaef0f529c9321cfebbaec1d7b8f503 ]

A NULL deref happens when nvmet_rdma_remove_one() is called more than once
(e.g. while connected via 2 ports).
The first call frees the queues related to the first ib_device but
doesn't remove them from the queue list.
While calling nvmet_rdma_remove_one() for the second ib_device it goes over
the full queue list again and we get the NULL deref.

Fixes: f1d4ef7d ("nvmet-rdma: register ib_client to not deadlock in device removal")
Signed-off-by: Israel Rukshin <>
Reviewed-by: Max Gurtovoy <>
Reviewed-by: Sagi Grimberg <>
Signed-off-by: Christoph Hellwig <>
Signed-off-by: Jens Axboe <>
Signed-off-by: Sasha Levin <>
Signed-off-by: Greg Kroah-Hartman <>
drivers/nvme/target/rdma.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@ -1512,15 +1512,17 @@ static struct nvmet_fabrics_ops nvmet_rd

static void nvmet_rdma_remove_one(struct ib_device *ib_device, void *client_data)
- struct nvmet_rdma_queue *queue;
+ struct nvmet_rdma_queue *queue, *tmp;

/* Device is being removed, delete all queues using this device */
- list_for_each_entry(queue, &nvmet_rdma_queue_list, queue_list) {
+ list_for_each_entry_safe(queue, tmp, &nvmet_rdma_queue_list,
+ queue_list) {
if (queue->dev->device != ib_device)

pr_info("Removing queue %d\n", queue->idx);
+ list_del_init(&queue->queue_list);

 \ /
  Last update: 2017-12-12 14:39    [W:0.490 / U:0.124 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site