]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDMA/i40w: Hold read semaphore while looking after VMA
authorLeon Romanovsky <leonro@mellanox.com>
Sun, 1 Jul 2018 16:36:24 +0000 (19:36 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Oct 2018 00:00:47 +0000 (17:00 -0700)
[ Upstream commit 5d9a2b0e28759e319a623da33940dbb3ce952b7d ]

VMA lookup is supposed to be performed while mmap_sem is held.

Fixes: f26c7c83395b ("i40iw: Add 2MB page support")
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/infiniband/hw/i40iw/i40iw_verbs.c

index b7961f21b555b5a348c520aa184edfe00dacd116..39398dd074d662778066b4deb7d10aac22c174dd 100644 (file)
@@ -1408,6 +1408,7 @@ static void i40iw_set_hugetlb_values(u64 addr, struct i40iw_mr *iwmr)
        struct vm_area_struct *vma;
        struct hstate *h;
 
+       down_read(&current->mm->mmap_sem);
        vma = find_vma(current->mm, addr);
        if (vma && is_vm_hugetlb_page(vma)) {
                h = hstate_vma(vma);
@@ -1416,6 +1417,7 @@ static void i40iw_set_hugetlb_values(u64 addr, struct i40iw_mr *iwmr)
                        iwmr->page_msk = huge_page_mask(h);
                }
        }
+       up_read(&current->mm->mmap_sem);
 }
 
 /**