diff options
author | Andrei Vagin <avagin@google.com> | 2024-06-28 05:10:12 +0300 |
---|---|---|
committer | Kees Cook <kees@kernel.org> | 2024-06-28 19:37:11 +0300 |
commit | bfafe5efa9754ebc991750da0bcca2a6694f3ed3 (patch) | |
tree | 231bcffdf2f62f9d54acbc554dbff1fb72d48132 /tools/perf/scripts/python/task-analyzer.py | |
parent | 95036a79e7b56178e2fa9c485114be61d24c1695 (diff) | |
download | linux-bfafe5efa9754ebc991750da0bcca2a6694f3ed3.tar.xz |
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>
Diffstat (limited to 'tools/perf/scripts/python/task-analyzer.py')
0 files changed, 0 insertions, 0 deletions