diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2018-01-25 11:27:27 -0800 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2018-01-26 10:43:46 -0500 |
commit | 487f6683f1b738e40aca2386b9f73da4ebb8223d (patch) | |
tree | a3d7ee5b94a0db12b991120ed446bf06d7b8adc3 /drivers/infiniband/hw | |
parent | dc728f779a71769526531d3d8593ab4ab1d8e436 (diff) | |
download | linux-487f6683f1b738e40aca2386b9f73da4ebb8223d.tar.bz2 |
IB/mthca: Fix gup usage in mthca_map_user_db()
get_user_pages() must be called with mmap_sem held, currently
it is not. In fact it is called under the user db_table->mutex.
To fix this we can convert gup to use the fast alternative,
and safely avoid taking mmap_sem, if possible. Furthermore
this is safe wrt to the mutex as other callers that take the
lock (unmap and alloc_db) are not called under mmap_sem
(hence possible deadlock).
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_memfree.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c index 2a41ed74add8..2fe503e86c1d 100644 --- a/drivers/infiniband/hw/mthca/mthca_memfree.c +++ b/drivers/infiniband/hw/mthca/mthca_memfree.c @@ -472,7 +472,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mthca_uar *uar, goto out; } - ret = get_user_pages(uaddr & PAGE_MASK, 1, FOLL_WRITE, pages, NULL); + ret = get_user_pages_fast(uaddr & PAGE_MASK, 1, FOLL_WRITE, pages); if (ret < 0) goto out; |