• Christian Brauner's avatar
    seccomp: release filter after task is fully dead · 3a15fb6e
    Christian Brauner authored
    The seccomp filter used to be released in free_task() which is called
    asynchronously via call_rcu() and assorted mechanisms. Since we need
    to inform tasks waiting on the seccomp notifier when a filter goes empty
    we will notify them as soon as a task has been marked fully dead in
    release_task(). To not split seccomp cleanup into two parts, move
    filter release out of free_task() and into release_task() after we've
    unhashed struct task from struct pid, exited signals, and unlinked it
    from the threadgroups' thread list. We'll put the empty filter
    notification infrastructure into it in a follow up patch.
    
    This also renames put_seccomp_filter() to seccomp_filter_release() which
    is a more descriptive name of what we're doing here especially once
    we've added the empty filter notification mechanism in there.
    
    We're also NULL-ing the task's filter tree entrypoint which seems
    cleaner than leaving a dangling pointer in there. Note that this shouldn't
    need any memory barriers since we're calling this when the task is in
    release_task() which means it's EXIT_DEAD. So it can't modify its seccomp
    filters anymore. You can also see this from the point where we're calling
    seccomp_filter_release(). It's after __exit_signal() and at this point,
    tsk->sighand will already have been NULLed which is required for
    thread-sync and filter installation alike.
    
    Cc: Tycho Andersen <tycho@tycho.ws>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Matt Denton <mpdenton@google.com>
    Cc: Sargun Dhillon <sargun@sargun.me>
    Cc: Jann Horn <jannh@google.com>
    Cc: Chris Palmer <palmer@google.com>
    Cc: Aleksa Sarai <cyphar@cyphar.com>
    Cc: Robert Sesek <rsesek@google.com>
    Cc: Jeffrey Vander Stoep <jeffv@google.com>
    Cc: Linux Containers <containers@lists.linux-foundation.org>
    Signed-off-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
    Link: https://lore.kernel.org/r/20200531115031.391515-2-christian.brauner@ubuntu.comSigned-off-by: default avatarKees Cook <keescook@chromium.org>
    3a15fb6e
fork.c 74.5 KB