diff --git a/kernel/fork.c b/kernel/fork.c index 9796897560ab18..501ca2351b69f2 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -537,6 +537,7 @@ void put_task_stack(struct task_struct *tsk) void free_task(struct task_struct *tsk) { + WARN_ON_ONCE(tsk->seccomp.filter); release_user_cpus_ptr(tsk); scs_release(tsk); @@ -2474,6 +2475,7 @@ static __latent_entropy struct task_struct *copy_process( sched_core_free(p); spin_unlock(¤t->sighand->siglock); write_unlock_irq(&tasklist_lock); + seccomp_filter_release(p); cgroup_cancel_fork(p, args); bad_fork_put_pidfd: if (clone_flags & CLONE_PIDFD) { diff --git a/kernel/seccomp.c b/kernel/seccomp.c index b5ac87f6dbd41b..fb03027f3e96e4 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c @@ -560,8 +560,6 @@ void seccomp_filter_release(struct task_struct *tsk) { struct seccomp_filter *orig = tsk->seccomp.filter; - /* We are effectively holding the siglock by not having any sighand. */ - WARN_ON(tsk->sighand != NULL); /* Detach task from its filter tree. */ tsk->seccomp.filter = NULL;