]> www.infradead.org Git - users/jedix/linux-maple.git/commit
seccomp: release task filters when the task exits
authorAndrei Vagin <avagin@google.com>
Fri, 28 Jun 2024 02:10:12 +0000 (02:10 +0000)
committerKees Cook <kees@kernel.org>
Fri, 28 Jun 2024 16:37:11 +0000 (09:37 -0700)
commitbfafe5efa9754ebc991750da0bcca2a6694f3ed3
tree231bcffdf2f62f9d54acbc554dbff1fb72d48132
parent95036a79e7b56178e2fa9c485114be61d24c1695
seccomp: release task filters when the task exits

Previously, seccomp filters were released in release_task(), which
required the process to exit and its zombie to be collected. However,
exited threads/processes can't trigger any seccomp events, making it
more logical to release filters upon task exits.

This adjustment simplifies scenarios where a parent is tracing its child
process. The parent process can now handle all events from a seccomp
listening descriptor and then call wait to collect a child zombie.

seccomp_filter_release takes the siglock to avoid races with
seccomp_sync_threads. There was an idea to bypass taking the lock by
checking PF_EXITING, but it can be set without holding siglock if
threads have SIGNAL_GROUP_EXIT. This means it can happen concurently
with seccomp_filter_release.

This change also fixes another minor problem. Suppose that a group
leader installs the new filter without SECCOMP_FILTER_FLAG_TSYNC, exits,
and becomes a zombie. Without this change, SECCOMP_FILTER_FLAG_TSYNC
from any other thread can never succeed, seccomp_can_sync_threads() will
check a zombie leader and is_ancestor() will fail.

Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Andrei Vagin <avagin@google.com>
Link: https://lore.kernel.org/r/20240628021014.231976-3-avagin@google.com
Reviewed-by: Tycho Andersen <tandersen@netflix.com>
Signed-off-by: Kees Cook <kees@kernel.org>
kernel/exit.c
kernel/seccomp.c