]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm: replace get_user_pages() write/force parameters with gup_flags
authorLorenzo Stoakes <lstoakes@gmail.com>
Thu, 13 Oct 2016 00:20:16 +0000 (01:20 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 17 Dec 2018 20:55:16 +0000 (21:55 +0100)
commit 768ae309a96103ed02eb1e111e838c87854d8b51 upstream.

This removes the 'write' and 'force' from get_user_pages() and replaces
them with 'gup_flags' to make the use of FOLL_FORCE explicit in callers
as use of this flag can result in surprising behaviour (and hence bugs)
within the mm subsystem.

Signed-off-by: Lorenzo Stoakes <lstoakes@gmail.com>
Acked-by: Christian König <christian.koenig@amd.com>
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
[bwh: Backported to 4.4:
 - Drop changes in rapidio, vchiq, goldfish
 - Keep the "write" variable in amdgpu_ttm_tt_pin_userptr() as it's still
   needed
 - Also update calls from various other places that now use
   get_user_pages_remote() upstream, which were updated there by commit
   9beae1ea8930 "mm: replace get_user_pages_remote() write/force ..."
 - Also update calls from hfi1 and ipath
 - Adjust context]
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
26 files changed:
arch/cris/arch-v32/drivers/cryptocop.c
arch/ia64/kernel/err_inject.c
arch/x86/mm/mpx.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/i915/i915_gem_userptr.c
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/via/via_dmablit.c
drivers/infiniband/core/umem.c
drivers/infiniband/core/umem_odp.c
drivers/infiniband/hw/mthca/mthca_memfree.c
drivers/infiniband/hw/qib/qib_user_pages.c
drivers/infiniband/hw/usnic/usnic_uiom.c
drivers/media/v4l2-core/videobuf-dma-sg.c
drivers/misc/mic/scif/scif_rma.c
drivers/misc/sgi-gru/grufault.c
drivers/staging/rdma/hfi1/user_pages.c
drivers/staging/rdma/ipath/ipath_user_pages.c
drivers/virt/fsl_hypervisor.c
fs/exec.c
include/linux/mm.h
kernel/events/uprobes.c
mm/gup.c
mm/memory.c
mm/mempolicy.c
mm/nommu.c
security/tomoyo/domain.c

index 877da1908234b7b027fa92c8476903c9b4832dae..98e2a5dbcfda56038273a1b07837c87f1fcf11eb 100644 (file)
@@ -2724,7 +2724,6 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig
                             (unsigned long int)(oper.indata + prev_ix),
                             noinpages,
                             0,  /* read access only for in data */
-                            0, /* no force */
                             inpages,
                             NULL);
 
@@ -2740,8 +2739,7 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig
                                     current->mm,
                                     (unsigned long int)oper.cipher_outdata,
                                     nooutpages,
-                                    1, /* write access for out data */
-                                    0, /* no force */
+                                    FOLL_WRITE, /* write access for out data */
                                     outpages,
                                     NULL);
                up_read(&current->mm->mmap_sem);
index 0c161ed6d18e6d77433c8bafabfdd48f904a077d..8205b456de7a6698b7e8102f4825d1b039444ccb 100644 (file)
@@ -143,7 +143,7 @@ store_virtual_to_phys(struct device *dev, struct device_attribute *attr,
        int ret;
 
         ret = get_user_pages(current, current->mm, virt_addr,
-                        1, VM_READ, 0, NULL, NULL);
+                            1, FOLL_WRITE, NULL, NULL);
        if (ret<=0) {
 #ifdef ERR_INJ_DEBUG
                printk("Virtual address %lx is not existing.\n",virt_addr);
index 7ed47b1e6f42d0d96a67484d0ef9c68fd9900195..7e94fc6f608ad2c377472174a225513ba37ac1fe 100644 (file)
@@ -536,10 +536,9 @@ static int mpx_resolve_fault(long __user *addr, int write)
 {
        long gup_ret;
        int nr_pages = 1;
-       int force = 0;
 
        gup_ret = get_user_pages(current, current->mm, (unsigned long)addr,
-                                nr_pages, write, force, NULL, NULL);
+                                nr_pages, write ? FOLL_WRITE : 0, NULL, NULL);
        /*
         * get_user_pages() returns number of pages gotten.
         * 0 means we failed to fault in and get anything,
index e40a6d8b0b92813a6d91a83cb46726c37e0dacd5..062c23125b2a62f411530d17b0d2e16dc7cc9735 100644 (file)
@@ -496,9 +496,13 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm)
        int r;
 
        int write = !(gtt->userflags & AMDGPU_GEM_USERPTR_READONLY);
+       unsigned int flags = 0;
        enum dma_data_direction direction = write ?
                DMA_BIDIRECTIONAL : DMA_TO_DEVICE;
 
+       if (write)
+               flags |= FOLL_WRITE;
+
        if (current->mm != gtt->usermm)
                return -EPERM;
 
@@ -519,7 +523,7 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm)
                struct page **pages = ttm->pages + pinned;
 
                r = get_user_pages(current, current->mm, userptr, num_pages,
-                                  write, 0, pages, NULL);
+                                  flags, pages, NULL);
                if (r < 0)
                        goto release_pages;
 
index 359fe2b8bb8a8751cc2b6653c6e604f840f25bca..b02113b57d5168fe4ac67667620ef7f7228d1ee0 100644 (file)
@@ -581,13 +581,17 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
                pvec = drm_malloc_ab(npages, sizeof(struct page *));
        if (pvec != NULL) {
                struct mm_struct *mm = obj->userptr.mm->mm;
+               unsigned int flags = 0;
+
+               if (!obj->userptr.read_only)
+                       flags |= FOLL_WRITE;
 
                down_read(&mm->mmap_sem);
                while (pinned < npages) {
                        ret = get_user_pages(work->task, mm,
                                             obj->userptr.ptr + pinned * PAGE_SIZE,
                                             npages - pinned,
-                                            !obj->userptr.read_only, 0,
+                                            flags,
                                             pvec + pinned, NULL);
                        if (ret < 0)
                                break;
index d684e2b79d2bf9c5216411e2ca098396f1f174da..0c380fe77382694466768a8f4ac4794eea5f846e 100644 (file)
@@ -557,7 +557,7 @@ static int radeon_ttm_tt_pin_userptr(struct ttm_tt *ttm)
                struct page **pages = ttm->pages + pinned;
 
                r = get_user_pages(current, current->mm, userptr, num_pages,
-                                  write, 0, pages, NULL);
+                                  write ? FOLL_WRITE : 0, pages, NULL);
                if (r < 0)
                        goto release_pages;
 
index d0cbd5ecd7f0fa4893ff7e775613f3f7e55090f0..4459cb32d1fec0c4740dda102d30d28b8a225aba 100644 (file)
@@ -242,8 +242,8 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg,  drm_via_dmablit_t *xfer)
        ret = get_user_pages(current, current->mm,
                             (unsigned long)xfer->mem_addr,
                             vsg->num_pages,
-                            (vsg->direction == DMA_FROM_DEVICE),
-                            0, vsg->pages, NULL);
+                            (vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE : 0,
+                            vsg->pages, NULL);
 
        up_read(&current->mm->mmap_sem);
        if (ret != vsg->num_pages) {
index 98fd9a5948417c4e06ef0bf7bafd0033b0db42f6..8762eac47570c2e59bd88123b4e15ad2464c42af 100644 (file)
@@ -95,6 +95,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
        DEFINE_DMA_ATTRS(attrs);
        struct scatterlist *sg, *sg_list_start;
        int need_release = 0;
+       unsigned int gup_flags = FOLL_WRITE;
 
        if (dmasync)
                dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs);
@@ -177,6 +178,9 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
        if (ret)
                goto out;
 
+       if (!umem->writable)
+               gup_flags |= FOLL_FORCE;
+
        need_release = 1;
        sg_list_start = umem->sg_head.sgl;
 
@@ -184,7 +188,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
                ret = get_user_pages(current, current->mm, cur_base,
                                     min_t(unsigned long, npages,
                                           PAGE_SIZE / sizeof (struct page *)),
-                                    1, !umem->writable, page_list, vma_list);
+                                    gup_flags, page_list, vma_list);
 
                if (ret < 0)
                        goto out;
index 40becdb3196e07b97c94ade818af5755bfaae4db..738ccfee7caefe5e4a513f2cdab29d29d4312568 100644 (file)
@@ -527,6 +527,7 @@ int ib_umem_odp_map_dma_pages(struct ib_umem *umem, u64 user_virt, u64 bcnt,
        u64 off;
        int j, k, ret = 0, start_idx, npages = 0;
        u64 base_virt_addr;
+       unsigned int flags = 0;
 
        if (access_mask == 0)
                return -EINVAL;
@@ -556,6 +557,9 @@ int ib_umem_odp_map_dma_pages(struct ib_umem *umem, u64 user_virt, u64 bcnt,
                goto out_put_task;
        }
 
+       if (access_mask & ODP_WRITE_ALLOWED_BIT)
+               flags |= FOLL_WRITE;
+
        start_idx = (user_virt - ib_umem_start(umem)) >> PAGE_SHIFT;
        k = start_idx;
 
@@ -574,8 +578,7 @@ int ib_umem_odp_map_dma_pages(struct ib_umem *umem, u64 user_virt, u64 bcnt,
                 */
                npages = get_user_pages(owning_process, owning_mm, user_virt,
                                        gup_num_pages,
-                                       access_mask & ODP_WRITE_ALLOWED_BIT, 0,
-                                       local_page_list, NULL);
+                                       flags, local_page_list, NULL);
                up_read(&owning_mm->mmap_sem);
 
                if (npages < 0)
index 7d2e42dd692657319f94e1ce950545f2638d2380..8676685dbf3d465ed3ac56c34974d67a5c9d0465 100644 (file)
@@ -472,8 +472,8 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mthca_uar *uar,
                goto out;
        }
 
-       ret = get_user_pages(current, current->mm, uaddr & PAGE_MASK, 1, 1, 0,
-                            pages, NULL);
+       ret = get_user_pages(current, current->mm, uaddr & PAGE_MASK, 1,
+                            FOLL_WRITE, pages, NULL);
        if (ret < 0)
                goto out;
 
index ab1588ae1c85554c7b50f7c0209310afead3fe2b..75c3f0dffe63b5bd80ba97ee3861b5530e417f62 100644 (file)
@@ -68,7 +68,8 @@ static int __qib_get_user_pages(unsigned long start_page, size_t num_pages,
        for (got = 0; got < num_pages; got += ret) {
                ret = get_user_pages(current, current->mm,
                                     start_page + got * PAGE_SIZE,
-                                    num_pages - got, 1, 1,
+                                    num_pages - got,
+                                    FOLL_WRITE | FOLL_FORCE,
                                     p + got, NULL);
                if (ret < 0)
                        goto bail_release;
index 645a5f6e6c88f0a4166bf0647d26d3b7bf082670..7f0d75e294415980fc4ccd51c1d73883fee904b0 100644 (file)
@@ -113,6 +113,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
        int flags;
        dma_addr_t pa;
        DEFINE_DMA_ATTRS(attrs);
+       unsigned int gup_flags;
 
        if (dmasync)
                dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs);
@@ -140,6 +141,8 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
 
        flags = IOMMU_READ | IOMMU_CACHE;
        flags |= (writable) ? IOMMU_WRITE : 0;
+       gup_flags = FOLL_WRITE;
+       gup_flags |= (writable) ? 0 : FOLL_FORCE;
        cur_base = addr & PAGE_MASK;
        ret = 0;
 
@@ -147,7 +150,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
                ret = get_user_pages(current, current->mm, cur_base,
                                        min_t(unsigned long, npages,
                                        PAGE_SIZE / sizeof(struct page *)),
-                                       1, !writable, page_list, NULL);
+                                       gup_flags, page_list, NULL);
 
                if (ret < 0)
                        goto out;
index f669cedca8bd16cf2c2642ee99ae3643202234e2..f74a74d91b9eb930add9fde0fbd5bbda51d3485a 100644 (file)
@@ -156,6 +156,7 @@ static int videobuf_dma_init_user_locked(struct videobuf_dmabuf *dma,
 {
        unsigned long first, last;
        int err, rw = 0;
+       unsigned int flags = FOLL_FORCE;
 
        dma->direction = direction;
        switch (dma->direction) {
@@ -178,13 +179,15 @@ static int videobuf_dma_init_user_locked(struct videobuf_dmabuf *dma,
        if (NULL == dma->pages)
                return -ENOMEM;
 
+       if (rw == READ)
+               flags |= FOLL_WRITE;
+
        dprintk(1, "init user [0x%lx+0x%lx => %d pages]\n",
                data, size, dma->nr_pages);
 
        err = get_user_pages(current, current->mm,
                             data & PAGE_MASK, dma->nr_pages,
-                            rw == READ, 1, /* force */
-                            dma->pages, NULL);
+                            flags, dma->pages, NULL);
 
        if (err != dma->nr_pages) {
                dma->nr_pages = (err >= 0) ? err : 0;
index 8bd63128d53673ac4f9a4d08819e0290889550a7..71c69e1c4ac05d5136492e25977da12cce35bb91 100644 (file)
@@ -1398,8 +1398,7 @@ retry:
                                mm,
                                (u64)addr,
                                nr_pages,
-                               !!(prot & SCIF_PROT_WRITE),
-                               0,
+                               (prot & SCIF_PROT_WRITE) ? FOLL_WRITE : 0,
                                pinned_pages->pages,
                                NULL);
                up_write(&mm->mmap_sem);
index f74fc0ca2ef9b86fbb85807ebcc9a9e3bae433fb..e6b723c6a2afcaca3e49a5074e5dd6df353aa46d 100644 (file)
@@ -199,7 +199,7 @@ static int non_atomic_pte_lookup(struct vm_area_struct *vma,
        *pageshift = PAGE_SHIFT;
 #endif
        if (get_user_pages
-           (current, current->mm, vaddr, 1, write, 0, &page, NULL) <= 0)
+           (current, current->mm, vaddr, 1, write ? FOLL_WRITE : 0, &page, NULL) <= 0)
                return -EFAULT;
        *paddr = page_to_phys(page);
        put_page(page);
index 9071afbd7bf44d271aef8072074af869df77fa5c..b776b74d3d1465e5a436ff145eab30980ff38590 100644 (file)
@@ -85,7 +85,7 @@ static int __hfi1_get_user_pages(unsigned long start_page, size_t num_pages,
        for (got = 0; got < num_pages; got += ret) {
                ret = get_user_pages(current, current->mm,
                                     start_page + got * PAGE_SIZE,
-                                    num_pages - got, 1, 1,
+                                    num_pages - got, FOLL_WRITE | FOLL_FORCE,
                                     p + got, NULL);
                if (ret < 0)
                        goto bail_release;
index d29b4daf61f83442b5133261ee01d861195bd1bb..f69ec728e0de8f6751b4cd6b350e7026f955ef59 100644 (file)
@@ -72,7 +72,7 @@ static int __ipath_get_user_pages(unsigned long start_page, size_t num_pages,
        for (got = 0; got < num_pages; got += ret) {
                ret = get_user_pages(current, current->mm,
                                     start_page + got * PAGE_SIZE,
-                                    num_pages - got, 1, 1,
+                                    num_pages - got, FOLL_WRITE | FOLL_FORCE,
                                     p + got, NULL);
                if (ret < 0)
                        goto bail_release;
index 32c8fc5f7a5c3762f7fc6486f34c7b061b26f1b1..590a0f51a249172aeb899a22904ab2b6d49673ea 100644 (file)
@@ -246,8 +246,8 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
        down_read(&current->mm->mmap_sem);
        num_pinned = get_user_pages(current, current->mm,
                param.local_vaddr - lb_offset, num_pages,
-               (param.source == -1) ? READ : WRITE,
-               0, pages, NULL);
+               (param.source == -1) ? 0 : FOLL_WRITE,
+               pages, NULL);
        up_read(&current->mm->mmap_sem);
 
        if (num_pinned != num_pages) {
index 910fc70c4542b9009e72123b11de144a81df4378..3dad755b70485d2aaa5ce06bb29ccdfe8b913c3a 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -191,6 +191,7 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
 {
        struct page *page;
        int ret;
+       unsigned int gup_flags = FOLL_FORCE;
 
 #ifdef CONFIG_STACK_GROWSUP
        if (write) {
@@ -199,8 +200,12 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
                        return NULL;
        }
 #endif
-       ret = get_user_pages(current, bprm->mm, pos,
-                       1, write, 1, &page, NULL);
+
+       if (write)
+               gup_flags |= FOLL_WRITE;
+
+       ret = get_user_pages(current, bprm->mm, pos, 1, gup_flags,
+                       &page, NULL);
        if (ret <= 0)
                return NULL;
 
index 5c18cd9c72d2ce0ebd1195fbc71f514c8e52d00b..d1cfd3657cce796b6dfcceb09d93fd1ebe3e4e2f 100644 (file)
@@ -1199,7 +1199,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                      struct vm_area_struct **vmas, int *nonblocking);
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                    unsigned long start, unsigned long nr_pages,
-                   int write, int force, struct page **pages,
+                   unsigned int gup_flags, struct page **pages,
                    struct vm_area_struct **vmas);
 long get_user_pages_locked(struct task_struct *tsk, struct mm_struct *mm,
                    unsigned long start, unsigned long nr_pages,
index 7108097fa2f21ca14b995ac7e13e78584c5a0b43..aad43c88a66851d44dd801f5f75a5457fb46c33c 100644 (file)
@@ -299,7 +299,7 @@ int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr,
 
 retry:
        /* Read the page with vaddr into memory */
-       ret = get_user_pages(NULL, mm, vaddr, 1, 0, 1, &old_page, &vma);
+       ret = get_user_pages(NULL, mm, vaddr, 1, FOLL_FORCE, &old_page, &vma);
        if (ret <= 0)
                return ret;
 
@@ -1700,7 +1700,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
        if (likely(result == 0))
                goto out;
 
-       result = get_user_pages(NULL, mm, vaddr, 1, 0, 1, &page, NULL);
+       result = get_user_pages(NULL, mm, vaddr, 1, FOLL_FORCE, &page, NULL);
        if (result < 0)
                return result;
 
index bcdefb9772690296e83604266581754be2eccf7d..2370e2417d612ab8f681f3d947a11e89557aa9a8 100644 (file)
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -854,18 +854,13 @@ EXPORT_SYMBOL(get_user_pages_unlocked);
  * FAULT_FLAG_ALLOW_RETRY to handle_mm_fault.
  */
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
-               unsigned long start, unsigned long nr_pages, int write,
-               int force, struct page **pages, struct vm_area_struct **vmas)
+               unsigned long start, unsigned long nr_pages,
+               unsigned int gup_flags, struct page **pages,
+               struct vm_area_struct **vmas)
 {
-       unsigned int flags = FOLL_TOUCH;
-
-       if (write)
-               flags |= FOLL_WRITE;
-       if (force)
-               flags |= FOLL_FORCE;
-
        return __get_user_pages_locked(tsk, mm, start, nr_pages,
-                                      pages, vmas, NULL, false, flags);
+                                      pages, vmas, NULL, false,
+                                      gup_flags | FOLL_TOUCH);
 }
 EXPORT_SYMBOL(get_user_pages);
 
index 5aee9ec8b8c6a522508fc8a402f847b0d4168211..13142accda4f726811b17a297f6aa3bcbf14e71f 100644 (file)
@@ -3715,6 +3715,10 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
 {
        struct vm_area_struct *vma;
        void *old_buf = buf;
+       unsigned int flags = FOLL_FORCE;
+
+       if (write)
+               flags |= FOLL_WRITE;
 
        down_read(&mm->mmap_sem);
        /* ignore errors, just check how much was successfully transferred */
@@ -3724,7 +3728,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
                struct page *page = NULL;
 
                ret = get_user_pages(tsk, mm, addr, 1,
-                               write, 1, &page, &vma);
+                               flags, &page, &vma);
                if (ret <= 0) {
 #ifndef CONFIG_HAVE_IOREMAP_PROT
                        break;
index be9840bf11d1daebb4d2a35eeacd0633dbb3e7b0..44134ba6fb53549e870bb86012ffb5cad61a3d45 100644 (file)
@@ -818,7 +818,7 @@ static int lookup_node(struct mm_struct *mm, unsigned long addr)
        struct page *p;
        int err;
 
-       err = get_user_pages(current, mm, addr & PAGE_MASK, 1, 0, 0, &p, NULL);
+       err = get_user_pages(current, mm, addr & PAGE_MASK, 1, 0, &p, NULL);
        if (err >= 0) {
                err = page_to_nid(p);
                put_page(p);
index 6cbb985238c49b178b00180148b4fe0abfc1c496..073ea36abc21c9ffa05464232c0e891bddbe4e66 100644 (file)
@@ -184,18 +184,11 @@ finish_or_fault:
  */
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                    unsigned long start, unsigned long nr_pages,
-                   int write, int force, struct page **pages,
+                   unsigned int gup_flags, struct page **pages,
                    struct vm_area_struct **vmas)
 {
-       int flags = 0;
-
-       if (write)
-               flags |= FOLL_WRITE;
-       if (force)
-               flags |= FOLL_FORCE;
-
-       return __get_user_pages(tsk, mm, start, nr_pages, flags, pages, vmas,
-                               NULL);
+       return __get_user_pages(tsk, mm, start, nr_pages,
+                               gup_flags, pages, vmas, NULL);
 }
 EXPORT_SYMBOL(get_user_pages);
 
@@ -204,10 +197,7 @@ long get_user_pages_locked(struct task_struct *tsk, struct mm_struct *mm,
                           unsigned int gup_flags, struct page **pages,
                           int *locked)
 {
-       int write = gup_flags & FOLL_WRITE;
-       int force = gup_flags & FOLL_FORCE;
-
-       return get_user_pages(tsk, mm, start, nr_pages, write, force,
+       return get_user_pages(tsk, mm, start, nr_pages, gup_flags,
                              pages, NULL);
 }
 EXPORT_SYMBOL(get_user_pages_locked);
index 38651454ed08a5d0ae7479dda87a41bead18c7a1..6f388e77999c3c9fcebfbcc50a4cb0c92dbfb186 100644 (file)
@@ -874,7 +874,8 @@ bool tomoyo_dump_page(struct linux_binprm *bprm, unsigned long pos,
        }
        /* Same with get_arg_page(bprm, pos, 0) in fs/exec.c */
 #ifdef CONFIG_MMU
-       if (get_user_pages(current, bprm->mm, pos, 1, 0, 1, &page, NULL) <= 0)
+       if (get_user_pages(current, bprm->mm, pos, 1,
+                          FOLL_FORCE, &page, NULL) <= 0)
                return false;
 #else
        page = bprm->page[pos / PAGE_SIZE];