drm/edid/firmware: Add built-in edid/1280x720.bin firmware
[platform/kernel/linux-starfive.git] / kernel / fork.c
index 08969f5..6bb91fb 100644 (file)
@@ -535,6 +535,9 @@ void put_task_stack(struct task_struct *tsk)
 
 void free_task(struct task_struct *tsk)
 {
+#ifdef CONFIG_SECCOMP
+       WARN_ON_ONCE(tsk->seccomp.filter);
+#endif
        release_user_cpus_ptr(tsk);
        scs_release(tsk);
 
@@ -556,6 +559,7 @@ void free_task(struct task_struct *tsk)
        arch_release_task_struct(tsk);
        if (tsk->flags & PF_KTHREAD)
                free_kthread_struct(tsk);
+       bpf_task_storage_free(tsk);
        free_task_struct(tsk);
 }
 EXPORT_SYMBOL(free_task);
@@ -614,6 +618,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
        if (retval)
                goto out;
 
+       mt_clear_in_rcu(mas.tree);
        mas_for_each(&old_mas, mpnt, ULONG_MAX) {
                struct file *file;
 
@@ -700,6 +705,8 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
        retval = arch_dup_mmap(oldmm, mm);
 loop_out:
        mas_destroy(&mas);
+       if (!retval)
+               mt_set_in_rcu(mas.tree);
 out:
        mmap_write_unlock(mm);
        flush_tlb_mm(oldmm);
@@ -837,7 +844,6 @@ void __put_task_struct(struct task_struct *tsk)
        cgroup_free(tsk);
        task_numa_free(tsk, true);
        security_task_free(tsk);
-       bpf_task_storage_free(tsk);
        exit_creds(tsk);
        delayacct_tsk_free(tsk);
        put_signal_struct(tsk->signal);
@@ -2406,12 +2412,6 @@ static __latent_entropy struct task_struct *copy_process(
 
        spin_lock(&current->sighand->siglock);
 
-       /*
-        * Copy seccomp details explicitly here, in case they were changed
-        * before holding sighand lock.
-        */
-       copy_seccomp(p);
-
        rv_task_fork(p);
 
        rseq_fork(p, clone_flags);
@@ -2428,6 +2428,14 @@ static __latent_entropy struct task_struct *copy_process(
                goto bad_fork_cancel_cgroup;
        }
 
+       /* No more failure paths after this point. */
+
+       /*
+        * Copy seccomp details explicitly here, in case they were changed
+        * before holding sighand lock.
+        */
+       copy_seccomp(p);
+
        init_task_pid_links(p);
        if (likely(p->pid)) {
                ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
@@ -2923,7 +2931,7 @@ static bool clone3_args_valid(struct kernel_clone_args *kargs)
         * - make the CLONE_DETACHED bit reusable for clone3
         * - make the CSIGNAL bits reusable for clone3
         */
-       if (kargs->flags & (CLONE_DETACHED | CSIGNAL))
+       if (kargs->flags & (CLONE_DETACHED | (CSIGNAL & (~CLONE_NEWTIME))))
                return false;
 
        if ((kargs->flags & (CLONE_SIGHAND | CLONE_CLEAR_SIGHAND)) ==