Please sign in to comment.
infiniband: fix a possible use-after-free bug
ucma_process_join() will free the new allocated "mc" struct, if there is any error after that, especially the copy_to_user(). But in parallel, ucma_leave_multicast() could find this "mc" through idr_find() before ucma_process_join() frees it, since it is already published. So "mc" could be used in ucma_leave_multicast() after it is been allocated and freed in ucma_process_join(), since we don't refcnt it. Fix this by separating "publish" from ID allocation, so that we can get an ID first and publish it later after copy_to_user(). Fixes: c8f6a36 ("RDMA/cma: Add multicast communication support") Reported-by: Noam Rathaus <firstname.lastname@example.org> Signed-off-by: Cong Wang <email@example.com> Signed-off-by: Jason Gunthorpe <firstname.lastname@example.org>
- Loading branch information...