From: Davidlohr Bueso Date: Thu, 25 Jan 2018 19:27:27 +0000 (-0800) Subject: IB/mthca: Fix gup usage in mthca_map_user_db() X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=487f6683f1b738e40aca2386b9f73da4ebb8223d;p=openwrt%2Fstaging%2Fblogic.git 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 Signed-off-by: Doug Ledford --- 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;