From: Michael Guralnik <michaelgur@xxxxxxxxxxxx> Fix a bug on disassociate flow while deleting the event queues. Current code has a race between ib_uverbs_free_event_queue() and ib_uverbs_event_read() which might leave entries in the list and bring double free. Fixes: f7c8416ccea5 ("RDMA/core: Simplify destruction of FD uobjects") Signed-off-by: Michael Guralnik <michaelgur@xxxxxxxxxxxx> Reviewed-by: Yishai Hadas <yishaih@xxxxxxxxxxxx> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> --- drivers/infiniband/core/uverbs_std_types.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/infiniband/core/uverbs_std_types.c b/drivers/infiniband/core/uverbs_std_types.c index 994d8744b246..3abfc63225cb 100644 --- a/drivers/infiniband/core/uverbs_std_types.c +++ b/drivers/infiniband/core/uverbs_std_types.c @@ -220,6 +220,7 @@ void ib_uverbs_free_event_queue(struct ib_uverbs_event_queue *event_queue) list_for_each_entry_safe(entry, tmp, &event_queue->event_list, list) { if (entry->counter) list_del(&entry->obj_list); + list_del(&entry->list); kfree(entry); } spin_unlock_irq(&event_queue->lock); -- 2.24.1