mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
RDMA/umem: Fix missing mmap_sem in get umem ODP call
Add mmap_sem lock around VMA inspection in ib_umem_odp_get().
Fixes: 0008b84ea9
('IB/umem: Add support to huge ODP')
Signed-off-by: Artemy Kovalyov <artemyko@mellanox.com>
Reviewed-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
53376fedb9
commit
79bb5b7ee1
1 changed files with 5 additions and 1 deletions
|
@ -321,11 +321,15 @@ int ib_umem_odp_get(struct ib_ucontext *context, struct ib_umem *umem,
|
||||||
struct vm_area_struct *vma;
|
struct vm_area_struct *vma;
|
||||||
struct hstate *h;
|
struct hstate *h;
|
||||||
|
|
||||||
|
down_read(&mm->mmap_sem);
|
||||||
vma = find_vma(mm, ib_umem_start(umem));
|
vma = find_vma(mm, ib_umem_start(umem));
|
||||||
if (!vma || !is_vm_hugetlb_page(vma))
|
if (!vma || !is_vm_hugetlb_page(vma)) {
|
||||||
|
up_read(&mm->mmap_sem);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
h = hstate_vma(vma);
|
h = hstate_vma(vma);
|
||||||
umem->page_shift = huge_page_shift(h);
|
umem->page_shift = huge_page_shift(h);
|
||||||
|
up_read(&mm->mmap_sem);
|
||||||
umem->hugetlb = 1;
|
umem->hugetlb = 1;
|
||||||
} else {
|
} else {
|
||||||
umem->hugetlb = 0;
|
umem->hugetlb = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue