]> Git Repo - J-linux.git/blobdiff - kernel/fork.c
Merge tag 'linux_kselftest-kunit-6.11-rc1' of git://git.kernel.org/pub/scm/linux...
[J-linux.git] / kernel / fork.c
index cea203197136bb232ba95b9fcee338f3683dae86..942e3d8617bf248cfe9342235f4e5e8c00932e59 100644 (file)
@@ -618,12 +618,6 @@ static void dup_mm_exe_file(struct mm_struct *mm, struct mm_struct *oldmm)
 
        exe_file = get_mm_exe_file(oldmm);
        RCU_INIT_POINTER(mm->exe_file, exe_file);
-       /*
-        * We depend on the oldmm having properly denied write access to the
-        * exe_file already.
-        */
-       if (exe_file && deny_write_access(exe_file))
-               pr_warn_once("deny_write_access() failed in %s\n", __func__);
 }
 
 #ifdef CONFIG_MMU
@@ -1415,20 +1409,11 @@ int set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file)
         */
        old_exe_file = rcu_dereference_raw(mm->exe_file);
 
-       if (new_exe_file) {
-               /*
-                * We expect the caller (i.e., sys_execve) to already denied
-                * write access, so this is unlikely to fail.
-                */
-               if (unlikely(deny_write_access(new_exe_file)))
-                       return -EACCES;
+       if (new_exe_file)
                get_file(new_exe_file);
-       }
        rcu_assign_pointer(mm->exe_file, new_exe_file);
-       if (old_exe_file) {
-               allow_write_access(old_exe_file);
+       if (old_exe_file)
                fput(old_exe_file);
-       }
        return 0;
 }
 
@@ -1467,9 +1452,6 @@ int replace_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file)
                        return ret;
        }
 
-       ret = deny_write_access(new_exe_file);
-       if (ret)
-               return -EACCES;
        get_file(new_exe_file);
 
        /* set the new file */
@@ -1478,10 +1460,8 @@ int replace_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file)
        rcu_assign_pointer(mm->exe_file, new_exe_file);
        mmap_write_unlock(mm);
 
-       if (old_exe_file) {
-               allow_write_access(old_exe_file);
+       if (old_exe_file)
                fput(old_exe_file);
-       }
        return 0;
 }
 
@@ -2944,8 +2924,6 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
 }
 #endif
 
-#ifdef __ARCH_WANT_SYS_CLONE3
-
 noinline static int copy_clone_args_from_user(struct kernel_clone_args *kargs,
                                              struct clone_args __user *uargs,
                                              size_t usize)
@@ -3089,6 +3067,11 @@ SYSCALL_DEFINE2(clone3, struct clone_args __user *, uargs, size_t, size)
        struct kernel_clone_args kargs;
        pid_t set_tid[MAX_PID_NS_LEVEL];
 
+#ifdef __ARCH_BROKEN_SYS_CLONE3
+#warning clone3() entry point is missing, please fix
+       return -ENOSYS;
+#endif
+
        kargs.set_tid = set_tid;
 
        err = copy_clone_args_from_user(&kargs, uargs, size);
@@ -3100,7 +3083,6 @@ SYSCALL_DEFINE2(clone3, struct clone_args __user *, uargs, size_t, size)
 
        return kernel_clone(&kargs);
 }
-#endif
 
 void walk_process_tree(struct task_struct *top, proc_visitor visitor, void *data)
 {
This page took 0.027753 seconds and 4 git commands to generate.