Merge tag 'denywrite-for-5.15' of git://github.com/davidhildenbrand/linux
[linux-2.6-microblaze.git] / fs / exec.c
index 9294049..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);
        }
@@ -2072,10 +2074,8 @@ SYSCALL_DEFINE5(execveat,
                const char __user *const __user *, envp,
                int, flags)
 {
-       int lookup_flags = (flags & AT_EMPTY_PATH) ? LOOKUP_EMPTY : 0;
-
        return do_execveat(fd,
-                          getname_flags(filename, lookup_flags, NULL),
+                          getname_uflags(filename, flags),
                           argv, envp, flags);
 }
 
@@ -2093,10 +2093,8 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd,
                       const compat_uptr_t __user *, envp,
                       int,  flags)
 {
-       int lookup_flags = (flags & AT_EMPTY_PATH) ? LOOKUP_EMPTY : 0;
-
        return compat_do_execveat(fd,
-                                 getname_flags(filename, lookup_flags, NULL),
+                                 getname_uflags(filename, flags),
                                  argv, envp, flags);
 }
 #endif