From: Oleg Nesterov <oleg@redhat.com>
To: Will Drewry <wad@chromium.org>
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
linux-doc@vger.kernel.org, kernel-hardening@lists.openwall.com,
netdev@vger.kernel.org, x86@kernel.org, arnd@arndb.de,
davem@davemloft.net, hpa@zytor.com, mingo@redhat.com,
peterz@infradead.org, rdunlap@xenotime.net,
mcgrathr@chromium.org, tglx@linutronix.de, luto@mit.edu,
eparis@redhat.com, serge.hallyn@canonical.com, djm@mindrot.org,
scarybeasts@gmail.com, indan@nul.nu, pmoore@redhat.com,
akpm@linux-foundation.org, corbet@lwn.net,
eric.dumazet@gmail.com, markus@chromium.org,
coreyb@linux.vnet.ibm.com, keescook@chromium.org
Subject: [kernel-hardening] Re: [PATCH v11 06/12] seccomp: add system call filtering using BPF
Date: Tue, 28 Feb 2012 16:13:33 +0100 [thread overview]
Message-ID: <20120228151333.GA3664@redhat.com> (raw)
In-Reply-To: <CABqD9hbtFDU_vgBOajG2jJxQoHubcwYWJuHPLjgZkZyjGkQ2uQ@mail.gmail.com>
On 02/27, Will Drewry wrote:
>
> On Mon, Feb 27, 2012 at 11:09 AM, Oleg Nesterov <oleg@redhat.com> wrote:
>
> >> +static long seccomp_attach_filter(struct sock_fprog *fprog)
> >> +{
> >> + struct seccomp_filter *filter;
> >> + unsigned long fp_size = fprog->len * sizeof(struct sock_filter);
> >> + long ret;
> >> +
> >> + if (fprog->len == 0 || fprog->len > BPF_MAXINSNS)
> >> + return -EINVAL;
> >
> > OK, this limits the memory PR_SET_SECCOMP can use.
> >
> > But,
> >
> >> + /*
> >> + * If there is an existing filter, make it the prev and don't drop its
> >> + * task reference.
> >> + */
> >> + filter->prev = current->seccomp.filter;
> >> + current->seccomp.filter = filter;
> >> + return 0;
> >
> > this doesn't limit the number of filters, looks like a DoS.
> >
> > What if the application simply does prctl(PR_SET_SECCOMP, dummy_filter)
> > in an endless loop?
>
> It consumes a massive amount of kernel memory and, maybe, the OOM
> killer gives it a boot :)
may be ;) but most probably oom-killer kills another innocent task,
this memory is not accounted.
> I wasn't sure what the normal convention was for avoiding memory
> consumption by user processes. Should I just add a sysctl
Perhaps we can add a sysctl later, but personally I think that we
can start with some "arbitrary" #define BPF_MAXFILTERS.
> and a
> per-task counter for the max number of filters?
Do we really need the counter? attach_filter is not the fast path,
perhaps seccomp_attach_filter() could simply iterate the chain and
count the number?
In any case, if this hurts perfomance-wise then seccomp_run_filters()
has even more problems.
> I'm fine doing whatever makes sense here.
I am fine either way too.
Oleg.
WARNING: multiple messages have this Message-ID (diff)
From: Oleg Nesterov <oleg@redhat.com>
To: Will Drewry <wad@chromium.org>
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
linux-doc@vger.kernel.org, kernel-hardening@lists.openwall.com,
netdev@vger.kernel.org, x86@kernel.org, arnd@arndb.de,
davem@davemloft.net, hpa@zytor.com, mingo@redhat.com,
peterz@infradead.org, rdunlap@xenotime.net,
mcgrathr@chromium.org, tglx@linutronix.de, luto@mit.edu,
eparis@redhat.com, serge.hallyn@canonical.com, djm@mindrot.org,
scarybeasts@gmail.com, indan@nul.nu, pmoore@redhat.com,
akpm@linux-foundation.org, corbet@lwn.net,
eric.dumazet@gmail.com, markus@chromium.org,
coreyb@linux.vnet.ibm.com, keescook@chromium.org
Subject: Re: [PATCH v11 06/12] seccomp: add system call filtering using BPF
Date: Tue, 28 Feb 2012 16:13:33 +0100 [thread overview]
Message-ID: <20120228151333.GA3664@redhat.com> (raw)
In-Reply-To: <CABqD9hbtFDU_vgBOajG2jJxQoHubcwYWJuHPLjgZkZyjGkQ2uQ@mail.gmail.com>
On 02/27, Will Drewry wrote:
>
> On Mon, Feb 27, 2012 at 11:09 AM, Oleg Nesterov <oleg@redhat.com> wrote:
>
> >> +static long seccomp_attach_filter(struct sock_fprog *fprog)
> >> +{
> >> + struct seccomp_filter *filter;
> >> + unsigned long fp_size = fprog->len * sizeof(struct sock_filter);
> >> + long ret;
> >> +
> >> + if (fprog->len == 0 || fprog->len > BPF_MAXINSNS)
> >> + return -EINVAL;
> >
> > OK, this limits the memory PR_SET_SECCOMP can use.
> >
> > But,
> >
> >> + /*
> >> + * If there is an existing filter, make it the prev and don't drop its
> >> + * task reference.
> >> + */
> >> + filter->prev = current->seccomp.filter;
> >> + current->seccomp.filter = filter;
> >> + return 0;
> >
> > this doesn't limit the number of filters, looks like a DoS.
> >
> > What if the application simply does prctl(PR_SET_SECCOMP, dummy_filter)
> > in an endless loop?
>
> It consumes a massive amount of kernel memory and, maybe, the OOM
> killer gives it a boot :)
may be ;) but most probably oom-killer kills another innocent task,
this memory is not accounted.
> I wasn't sure what the normal convention was for avoiding memory
> consumption by user processes. Should I just add a sysctl
Perhaps we can add a sysctl later, but personally I think that we
can start with some "arbitrary" #define BPF_MAXFILTERS.
> and a
> per-task counter for the max number of filters?
Do we really need the counter? attach_filter is not the fast path,
perhaps seccomp_attach_filter() could simply iterate the chain and
count the number?
In any case, if this hurts perfomance-wise then seccomp_run_filters()
has even more problems.
> I'm fine doing whatever makes sense here.
I am fine either way too.
Oleg.
next prev parent reply other threads:[~2012-02-28 15:13 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-25 3:21 [kernel-hardening] [PATCH v11 01/12] sk_run_filter: add support for custom load_pointer Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 02/12] net/compat.c,linux/filter.h: share compat_sock_fprog Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 03/12] seccomp: kill the seccomp_t typedef Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 04/12] asm/syscall.h: add syscall_get_arch Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 05/12] arch/x86: add syscall_get_arch to syscall.h Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 06/12] seccomp: add system call filtering using BPF Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-26 20:28 ` [kernel-hardening] " Kees Cook
2012-02-26 20:28 ` Kees Cook
2012-02-27 16:23 ` [kernel-hardening] " Will Drewry
2012-02-27 16:23 ` Will Drewry
2012-02-27 16:49 ` [kernel-hardening] " Eric Paris
2012-02-27 16:49 ` Eric Paris
2012-02-27 18:55 ` [kernel-hardening] " Kees Cook
2012-02-27 18:55 ` Kees Cook
2012-02-27 19:25 ` [kernel-hardening] " Eric Paris
2012-02-27 19:25 ` Eric Paris
2012-02-27 20:00 ` [kernel-hardening] " Kees Cook
2012-02-27 20:00 ` Kees Cook
2012-02-27 20:34 ` [kernel-hardening] " Eric Paris
2012-02-27 20:34 ` Eric Paris
2012-02-27 20:49 ` [kernel-hardening] " Kees Cook
2012-02-27 20:49 ` Kees Cook
2012-02-27 17:09 ` [kernel-hardening] " Oleg Nesterov
2012-02-27 17:09 ` Oleg Nesterov
2012-02-27 19:54 ` [kernel-hardening] " Will Drewry
2012-02-27 19:54 ` Will Drewry
2012-02-27 20:15 ` [kernel-hardening] " Kees Cook
2012-02-27 20:15 ` Kees Cook
2012-02-28 15:13 ` Oleg Nesterov [this message]
2012-02-28 15:13 ` Oleg Nesterov
2012-02-28 17:18 ` [kernel-hardening] " Will Drewry
2012-02-28 17:18 ` Will Drewry
2012-02-28 6:51 ` [kernel-hardening] " Indan Zupancic
2012-02-28 6:51 ` Indan Zupancic
2012-02-28 6:51 ` Indan Zupancic
2012-02-28 6:51 ` Indan Zupancic
2012-02-28 7:52 ` [kernel-hardening] " Kees Cook
2012-02-28 7:52 ` Kees Cook
2012-02-28 17:17 ` [kernel-hardening] " Will Drewry
2012-02-28 17:17 ` Will Drewry
2012-02-28 17:47 ` [kernel-hardening] " Markus Gutschke
2012-02-28 17:47 ` Markus Gutschke
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 07/12] seccomp: add SECCOMP_RET_ERRNO Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 20:20 ` [kernel-hardening] " Kees Cook
2012-02-25 20:20 ` Kees Cook
2012-02-27 16:22 ` [kernel-hardening] " Will Drewry
2012-02-27 16:22 ` Will Drewry
2012-02-27 17:11 ` [kernel-hardening] " Oleg Nesterov
2012-02-27 17:11 ` Oleg Nesterov
2012-02-27 18:09 ` [kernel-hardening] " Kees Cook
2012-02-27 18:09 ` Kees Cook
2012-02-27 18:14 ` [kernel-hardening] " Oleg Nesterov
2012-02-27 18:14 ` Oleg Nesterov
2012-02-27 18:35 ` [kernel-hardening] " Andrew Lutomirski
2012-02-27 18:35 ` Andrew Lutomirski
2012-02-27 19:14 ` [kernel-hardening] " Kees Cook
2012-02-27 19:14 ` Kees Cook
2012-02-27 19:54 ` [kernel-hardening] " Will Drewry
2012-02-27 19:54 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 08/12] signal, x86: add SIGSYS info and make it synchronous Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-27 17:22 ` [kernel-hardening] " Oleg Nesterov
2012-02-27 17:22 ` Oleg Nesterov
2012-02-27 17:34 ` [kernel-hardening] " Roland McGrath
2012-02-27 17:34 ` Roland McGrath
2012-02-27 18:08 ` [kernel-hardening] " Oleg Nesterov
2012-02-27 18:08 ` Oleg Nesterov
2012-02-27 20:24 ` [kernel-hardening] " Will Drewry
2012-02-27 20:24 ` Will Drewry
2012-02-28 16:02 ` [kernel-hardening] " Oleg Nesterov
2012-02-28 16:02 ` Oleg Nesterov
2012-02-28 17:06 ` [kernel-hardening] " Will Drewry
2012-02-28 17:06 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 09/12] seccomp: Add SECCOMP_RET_TRAP Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 10/12] ptrace,seccomp: Add PTRACE_SECCOMP support Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-27 17:54 ` [kernel-hardening] " Oleg Nesterov
2012-02-27 17:54 ` Oleg Nesterov
2012-02-27 19:47 ` [kernel-hardening] " Will Drewry
2012-02-27 19:47 ` Will Drewry
2012-02-28 16:43 ` [kernel-hardening] " Oleg Nesterov
2012-02-28 16:43 ` Oleg Nesterov
2012-02-28 17:04 ` [kernel-hardening] " Will Drewry
2012-02-28 17:04 ` Will Drewry
2012-02-28 18:34 ` [kernel-hardening] " Will Drewry
2012-02-28 18:34 ` Will Drewry
2012-02-29 16:14 ` [kernel-hardening] " Oleg Nesterov
2012-02-29 16:14 ` Oleg Nesterov
2012-02-29 16:33 ` [kernel-hardening] " Will Drewry
2012-02-29 16:33 ` Will Drewry
2012-02-29 17:09 ` [kernel-hardening] " Oleg Nesterov
2012-02-29 17:09 ` Oleg Nesterov
2012-02-29 17:41 ` [kernel-hardening] " Roland McGrath
2012-02-29 17:41 ` Roland McGrath
2012-02-29 17:51 ` [kernel-hardening] " Will Drewry
2012-02-29 17:51 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 11/12] x86: Enable HAVE_ARCH_SECCOMP_FILTER Will Drewry
2012-02-25 3:21 ` Will Drewry
2012-02-25 3:21 ` [kernel-hardening] [PATCH v11 12/12] Documentation: prctl/seccomp_filter Will Drewry
2012-02-25 3:21 ` Will Drewry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120228151333.GA3664@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=corbet@lwn.net \
--cc=coreyb@linux.vnet.ibm.com \
--cc=davem@davemloft.net \
--cc=djm@mindrot.org \
--cc=eparis@redhat.com \
--cc=eric.dumazet@gmail.com \
--cc=hpa@zytor.com \
--cc=indan@nul.nu \
--cc=keescook@chromium.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@mit.edu \
--cc=markus@chromium.org \
--cc=mcgrathr@chromium.org \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=pmoore@redhat.com \
--cc=rdunlap@xenotime.net \
--cc=scarybeasts@gmail.com \
--cc=serge.hallyn@canonical.com \
--cc=tglx@linutronix.de \
--cc=wad@chromium.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.