Merge tag 'libnvdimm-for-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdim...
[linux-2.6-microblaze.git] / fs / exec.c
index 3b78b22..a098c13 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -217,8 +217,10 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
         * We are doing an exec().  'current' is the process
         * doing the exec and bprm->mm is the new process's mm.
         */
+       mmap_read_lock(bprm->mm);
        ret = get_user_pages_remote(bprm->mm, pos, 1, gup_flags,
                        &page, NULL, NULL);
+       mmap_read_unlock(bprm->mm);
        if (ret <= 0)
                return NULL;
 
@@ -574,7 +576,7 @@ static int copy_strings(int argc, struct user_arg_ptr argv,
                                }
 
                                if (kmapped_page) {
-                                       flush_kernel_dcache_page(kmapped_page);
+                                       flush_dcache_page(kmapped_page);
                                        kunmap(kmapped_page);
                                        put_arg_page(kmapped_page);
                                }
@@ -592,7 +594,7 @@ static int copy_strings(int argc, struct user_arg_ptr argv,
        ret = 0;
 out:
        if (kmapped_page) {
-               flush_kernel_dcache_page(kmapped_page);
+               flush_dcache_page(kmapped_page);
                kunmap(kmapped_page);
                put_arg_page(kmapped_page);
        }
@@ -634,7 +636,7 @@ int copy_string_kernel(const char *arg, struct linux_binprm *bprm)
                kaddr = kmap_atomic(page);
                flush_arg_page(bprm, pos & PAGE_MASK, page);
                memcpy(kaddr + offset_in_page(pos), arg, bytes_to_copy);
-               flush_kernel_dcache_page(page);
+               flush_dcache_page(page);
                kunmap_atomic(kaddr);
                put_arg_page(page);
        }
@@ -1270,7 +1272,9 @@ int begin_new_exec(struct linux_binprm * bprm)
         * not visibile until then. This also enables the update
         * to be lockless.
         */
-       set_mm_exe_file(bprm->mm, bprm->file);
+       retval = set_mm_exe_file(bprm->mm, bprm->file);
+       if (retval)
+               goto out;
 
        /* If the binary is not readable then enforce mm->dumpable=0 */
        would_dump(bprm, bprm->file);