[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAG48ez3k0_7Vev_O=uV_WVuUGK6BPA0RyrYXMYSDV4DTMMe26g@mail.gmail.com>
Date: Mon, 21 Sep 2020 20:08:54 +0200
From: Jann Horn <jannh@...gle.com>
To: YiFei Zhu <zhuyifei1999@...il.com>
Cc: Linux Containers <containers@...ts.linux-foundation.org>,
YiFei Zhu <yifeifz2@...inois.edu>, bpf <bpf@...r.kernel.org>,
Andrea Arcangeli <aarcange@...hat.com>,
Dimitrios Skarlatos <dskarlat@...cmu.edu>,
Giuseppe Scrivano <gscrivan@...hat.com>,
Hubertus Franke <frankeh@...ibm.com>,
Jack Chen <jianyan2@...inois.edu>,
Josep Torrellas <torrella@...inois.edu>,
Kees Cook <keescook@...omium.org>,
Tianyin Xu <tyxu@...inois.edu>,
Tobin Feldman-Fitzthum <tobin@....com>,
Valentin Rothberg <vrothber@...hat.com>,
Andy Lutomirski <luto@...capital.net>,
Will Drewry <wad@...omium.org>,
Aleksa Sarai <cyphar@...har.com>,
kernel list <linux-kernel@...r.kernel.org>
Subject: Re: [RFC PATCH seccomp 2/2] seccomp/cache: Cache filter results that
allow syscalls
On Mon, Sep 21, 2020 at 7:35 AM YiFei Zhu <zhuyifei1999@...il.com> wrote:
[...]
> We do this by creating a per-task bitmap of permitted syscalls.
> If seccomp filter is invoked we check if it is cached and if so
> directly return allow. Else we call into the cBPF filter, and if
> the result is an allow then we cache the results.
What? Why? We already have code to statically evaluate the filter for
all syscall numbers. We should be using the results of that instead of
re-running the filter and separately caching the results.
> The cache is per-task
Please don't. The static results are per-filter, so the bitmask(s)
should also be per-filter and immutable.
> minimize thread-synchronization issues in
> the hot path of cache lookup
There should be no need for synchronization because those bitmasks
should be immutable.
> and to avoid different architecture
> numbers sharing the same cache.
There should be separate caches for separate architectures, and we
should precompute the results for all architectures. (We only have
around 2 different architectures max, so it's completely reasonable to
precompute and store all that.)
> To account for one thread changing the filter for another thread of
> the same process, the per-task struct also contains a pointer to
> the filter the cache is built on. When the cache lookup uses a
> different filter then the last lookup, the per-task cache bitmap is
> cleared.
Unnecessary complexity, we don't need that if we make the bitmasks immutable.
Powered by blists - more mailing lists