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: Mon, 27 Feb 2012 18:09:22 +0100 [thread overview]
Message-ID: <20120227170922.GA10608@redhat.com> (raw)
In-Reply-To: <1330140111-17201-6-git-send-email-wad@chromium.org>
Hello Will.
I missed the previous discussions, and I don't think I can read
all these emails now. So I apologize in advance if this was already
discussed.
On 02/24, Will Drewry wrote:
>
> struct seccomp {
> int mode;
> + struct seccomp_filter *filter;
> };
Minor nit, it seems that the new member can be "ifdef CONFIG_SECCOMP_FILTER"
> +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?
> +static struct seccomp_filter *get_seccomp_filter(struct seccomp_filter *orig)
> +{
> + if (!orig)
> + return NULL;
> + /* Reference count is bounded by the number of total processes. */
> + atomic_inc(&orig->usage);
> + return orig;
> +}
> ...
> +void copy_seccomp(struct seccomp *child, const struct seccomp *parent)
> +{
> + /* Other fields are handled by dup_task_struct. */
> + child->filter = get_seccomp_filter(parent->filter);
> +}
This is purely cosmetic, but imho looks a bit confusing.
We do not copy seccomp->mode and this is correct, it was already copied
implicitely. So why do we copy ->filter? This is not "symmetrical", afaics
you can simply do
void copy_seccomp(struct seccomp *child)
{
if (child->filter)
atomic_inc(child->filter->usage);
But once again, this is cosmetic, feel free to ignore.
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: Mon, 27 Feb 2012 18:09:22 +0100 [thread overview]
Message-ID: <20120227170922.GA10608@redhat.com> (raw)
In-Reply-To: <1330140111-17201-6-git-send-email-wad@chromium.org>
Hello Will.
I missed the previous discussions, and I don't think I can read
all these emails now. So I apologize in advance if this was already
discussed.
On 02/24, Will Drewry wrote:
>
> struct seccomp {
> int mode;
> + struct seccomp_filter *filter;
> };
Minor nit, it seems that the new member can be "ifdef CONFIG_SECCOMP_FILTER"
> +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?
> +static struct seccomp_filter *get_seccomp_filter(struct seccomp_filter *orig)
> +{
> + if (!orig)
> + return NULL;
> + /* Reference count is bounded by the number of total processes. */
> + atomic_inc(&orig->usage);
> + return orig;
> +}
> ...
> +void copy_seccomp(struct seccomp *child, const struct seccomp *parent)
> +{
> + /* Other fields are handled by dup_task_struct. */
> + child->filter = get_seccomp_filter(parent->filter);
> +}
This is purely cosmetic, but imho looks a bit confusing.
We do not copy seccomp->mode and this is correct, it was already copied
implicitely. So why do we copy ->filter? This is not "symmetrical", afaics
you can simply do
void copy_seccomp(struct seccomp *child)
{
if (child->filter)
atomic_inc(child->filter->usage);
But once again, this is cosmetic, feel free to ignore.
Oleg.
next prev parent reply other threads:[~2012-02-27 17:09 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 ` Oleg Nesterov [this message]
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 ` [kernel-hardening] " Oleg Nesterov
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=20120227170922.GA10608@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.