linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eric Paris <eparis@redhat.com>
To: Will Drewry <wad@chromium.org>
Cc: Kees Cook <kees@ubuntu.com>,
	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,
	oleg@redhat.com, peterz@infradead.org, rdunlap@xenotime.net,
	mcgrathr@chromium.org, tglx@linutronix.de, luto@mit.edu,
	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 11:49:56 -0500	[thread overview]
Message-ID: <1330361396.2542.11.camel@localhost> (raw)
In-Reply-To: <CABqD9hbKU=EVagCfo25AZsNoq=hmzkeOxK6mE=q8m=Be-ZFb9w@mail.gmail.com>

On Mon, 2012-02-27 at 10:23 -0600, Will Drewry wrote:
> On Sun, Feb 26, 2012 at 2:28 PM, Kees Cook <kees@ubuntu.com> wrote:
> > On Fri, Feb 24, 2012 at 09:21:45PM -0600, Will Drewry wrote:
> >> diff --git a/kernel/seccomp.c b/kernel/seccomp.c
> >> index e8d76c5..25e8296 100644
> >> --- a/kernel/seccomp.c
> >> +++ b/kernel/seccomp.c
> >> [...]
> >> +static void seccomp_filter_log_failure(int syscall)
> >> +{
> >> +     int compat = 0;
> >> +#ifdef CONFIG_COMPAT
> >> +     compat = is_compat_task();
> >> +#endif
> >> +     pr_info("%s[%d]: %ssystem call %d blocked at 0x%lx\n",
> >> +             current->comm, task_pid_nr(current),
> >> +             (compat ? "compat " : ""),
> >> +             syscall, KSTK_EIP(current));
> >> +}
> >> [...]
> >> +#ifdef CONFIG_SECCOMP_FILTER
> >> +     case SECCOMP_MODE_FILTER:
> >> +             if (seccomp_run_filters(this_syscall) == SECCOMP_RET_ALLOW)
> >> +                     return;
> >> +             seccomp_filter_log_failure(this_syscall);
> >> +             exit_code = SIGSYS;
> >> +             break;
> >> +#endif
> >>       default:
> >>               BUG();
> >>       }
> >> @@ -56,7 +324,7 @@ void __secure_computing(int this_syscall)
> >>       dump_stack();
> >>  #endif
> >>       audit_seccomp(this_syscall);
> >> -     do_exit(SIGKILL);
> >> +     do_exit(exit_code);
> >>  }
> >
> > I think the seccomp_filter_log_failure() use is redundant with the
> > audit_seccomp call.  Here's a possible reorganization of the logging...
> 
> Cool - a comment below:
> 
> > From: Kees Cook <keescook@chromium.org>
> > Date: Sun, 26 Feb 2012 11:56:12 -0800
> > Subject: [PATCH] seccomp: improve audit logging details
> >
> > This consolidates the seccomp filter error logging path and adds more
> > details to the audit log.
> >
> > Signed-off-by: Kees Cook <keescook@chromium.org>
> > ---
> >  include/linux/audit.h |    8 ++++----
> >  kernel/auditsc.c      |    9 +++++++--
> >  kernel/seccomp.c      |   15 +--------------
> >  3 files changed, 12 insertions(+), 20 deletions(-)
> >
> > diff --git a/include/linux/audit.h b/include/linux/audit.h
> > index 9ff7a2c..5aa6cfc 100644
> > --- a/include/linux/audit.h
> > +++ b/include/linux/audit.h
> > @@ -463,7 +463,7 @@ extern void audit_putname(const char *name);
> >  extern void __audit_inode(const char *name, const struct dentry *dentry);
> >  extern void __audit_inode_child(const struct dentry *dentry,
> >                                const struct inode *parent);
> > -extern void __audit_seccomp(unsigned long syscall);
> > +extern void __audit_seccomp(unsigned long syscall, long signr);
> >  extern void __audit_ptrace(struct task_struct *t);
> >
> >  static inline int audit_dummy_context(void)
> > @@ -508,10 +508,10 @@ static inline void audit_inode_child(const struct dentry *dentry,
> >  }
> >  void audit_core_dumps(long signr);
> >
> > -static inline void audit_seccomp(unsigned long syscall)
> > +static inline void audit_seccomp(unsigned long syscall, long signr)
> >  {
> >        if (unlikely(!audit_dummy_context()))
> > -               __audit_seccomp(syscall);
> > +               __audit_seccomp(syscall, signr);
> >  }
> >
> >  static inline void audit_ptrace(struct task_struct *t)
> > @@ -634,7 +634,7 @@ extern int audit_signals;
> >  #define audit_inode(n,d) do { (void)(d); } while (0)
> >  #define audit_inode_child(i,p) do { ; } while (0)
> >  #define audit_core_dumps(i) do { ; } while (0)
> > -#define audit_seccomp(i) do { ; } while (0)
> > +#define audit_seccomp(i,s) do { ; } while (0)
> >  #define auditsc_get_stamp(c,t,s) (0)
> >  #define audit_get_loginuid(t) (-1)
> >  #define audit_get_sessionid(t) (-1)
> > diff --git a/kernel/auditsc.c b/kernel/auditsc.c
> > index af1de0f..74652fe 100644
> > --- a/kernel/auditsc.c
> > +++ b/kernel/auditsc.c
> > @@ -67,6 +67,7 @@
> >  #include <linux/syscalls.h>
> >  #include <linux/capability.h>
> >  #include <linux/fs_struct.h>
> > +#include <linux/compat.h>
> >
> >  #include "audit.h"
> >
> > @@ -2710,13 +2711,17 @@ void audit_core_dumps(long signr)
> >        audit_log_end(ab);
> >  }
> >
> > -void __audit_seccomp(unsigned long syscall)
> > +void __audit_seccomp(unsigned long syscall, long signr)
> >  {
> >        struct audit_buffer *ab;
> >
> >        ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_ANOM_ABEND);
> > -       audit_log_abend(ab, "seccomp", SIGKILL);
> > +       audit_log_abend(ab, "seccomp", signr);
> >        audit_log_format(ab, " syscall=%ld", syscall);
> > +#ifdef CONFIG_COMPAT
> > +       audit_log_format(ab, " compat=%d", is_compat_task());
> > +#endif
> 
> Should this just use syscall_get_arch to get the AUDIT_ARCH now? :)

I'm waffling on this one, but I'm leaning towards not including compat
at all.  If you include it, yes, you should use the generic function.

If you have CONFIG_AUDITSC and started audit you are going to get this,
along with a0-a4, in a separate but associated audit record.  Thus you
get all the interesting/relevant info.  Without CONFIG_AUDITSC and
running auditd you get compat, but nothing else.  Why is compat so
interesting?

This patch would duplicate the arch=field from that record (calling it
compat).  So if we are going to duplicate it in another record, we
should at least call it the same thing (arch=%x)

My current thinking, and I'm not settled would be to include syscall,
a0-a4 and arch in the record only if !CONFIG_AUDITSC.  (ip doesn't show
up elsewhere, so that makes sense here)

It might be annoying to have to find the info in the right record, but
if you use the auparse audit library tools, it should 'Just Work'...

> > +       audit_log_format(ab, " ip=0x%lx", KSTK_EIP(current));
> >        audit_log_end(ab);
> >  }
> >
> > diff --git a/kernel/seccomp.c b/kernel/seccomp.c
> > index 5aabc3c..40af83f 100644
> > --- a/kernel/seccomp.c
> > +++ b/kernel/seccomp.c
> > @@ -57,18 +57,6 @@ struct seccomp_filter {
> >        struct sock_filter insns[];
> >  };
> >
> > -static void seccomp_filter_log_failure(int syscall)
> > -{
> > -       int compat = 0;
> > -#ifdef CONFIG_COMPAT
> > -       compat = is_compat_task();
> > -#endif
> > -       pr_info("%s[%d]: %ssystem call %d blocked at 0x%lx\n",
> > -               current->comm, task_pid_nr(current),
> > -               (compat ? "compat " : ""),
> > -               syscall, KSTK_EIP(current));
> > -}
> > -
> >  /**
> >  * get_u32 - returns a u32 offset into data
> >  * @data: a unsigned 64 bit value
> > @@ -378,7 +366,6 @@ int __secure_computing_int(int this_syscall)
> >                default:
> >                        break;
> >                }
> > -               seccomp_filter_log_failure(this_syscall);
> >                exit_code = SIGSYS;
> >                break;
> >        }
> > @@ -390,7 +377,7 @@ int __secure_computing_int(int this_syscall)
> >  #ifdef SECCOMP_DEBUG
> >        dump_stack();
> >  #endif
> > -       audit_seccomp(this_syscall);
> > +       audit_seccomp(this_syscall, exit_code);
> >        do_exit(exit_code);
> >        return -1;      /* never reached */
> >  }
> > --
> > 1.7.0.4
> 
> I'll pull this into the series if that's okay with you?
> 
> Thanks!



  reply	other threads:[~2012-02-27 16:51 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-25  3:21 [PATCH v11 01/12] sk_run_filter: add support for custom load_pointer Will Drewry
2012-02-25  3:21 ` [PATCH v11 02/12] net/compat.c,linux/filter.h: share compat_sock_fprog Will Drewry
2012-02-25  3:21 ` [PATCH v11 03/12] seccomp: kill the seccomp_t typedef Will Drewry
2012-02-25  3:21 ` [PATCH v11 04/12] asm/syscall.h: add syscall_get_arch Will Drewry
2012-02-25  3:21 ` [PATCH v11 05/12] arch/x86: add syscall_get_arch to syscall.h Will Drewry
2012-02-25  3:21 ` [PATCH v11 06/12] seccomp: add system call filtering using BPF Will Drewry
2012-02-26 20:28   ` Kees Cook
2012-02-27 16:23     ` Will Drewry
2012-02-27 16:49       ` Eric Paris [this message]
2012-02-27 18:55         ` Kees Cook
2012-02-27 19:25           ` Eric Paris
2012-02-27 20:00             ` Kees Cook
2012-02-27 20:34               ` Eric Paris
2012-02-27 20:49                 ` Kees Cook
2012-02-27 17:09   ` Oleg Nesterov
2012-02-27 19:54     ` Will Drewry
2012-02-27 20:15       ` Kees Cook
2012-02-28 15:13       ` Oleg Nesterov
2012-02-28 17:18         ` Will Drewry
2012-02-28  6:51   ` Indan Zupancic
2012-02-28  7:52     ` Kees Cook
2012-02-28 17:17     ` Will Drewry
2012-02-28 17:47       ` Markus Gutschke
2012-02-25  3:21 ` [PATCH v11 07/12] seccomp: add SECCOMP_RET_ERRNO Will Drewry
2012-02-25 20:20   ` Kees Cook
2012-02-27 16:22     ` Will Drewry
2012-02-27 17:11   ` Oleg Nesterov
2012-02-27 18:09     ` Kees Cook
2012-02-27 18:14       ` Oleg Nesterov
2012-02-27 18:35         ` Andrew Lutomirski
2012-02-27 19:14           ` Kees Cook
2012-02-27 19:54             ` Will Drewry
2012-02-25  3:21 ` [PATCH v11 08/12] signal, x86: add SIGSYS info and make it synchronous Will Drewry
2012-02-27 17:22   ` Oleg Nesterov
2012-02-27 17:34     ` Roland McGrath
2012-02-27 18:08       ` Oleg Nesterov
2012-02-27 20:24     ` Will Drewry
2012-02-28 16:02       ` Oleg Nesterov
2012-02-28 17:06         ` Will Drewry
2012-02-25  3:21 ` [PATCH v11 09/12] seccomp: Add SECCOMP_RET_TRAP Will Drewry
2012-02-25  3:21 ` [PATCH v11 10/12] ptrace,seccomp: Add PTRACE_SECCOMP support Will Drewry
2012-02-27 17:54   ` Oleg Nesterov
2012-02-27 19:47     ` Will Drewry
2012-02-28 16:43       ` Oleg Nesterov
2012-02-28 17:04         ` Will Drewry
2012-02-28 18:34           ` Will Drewry
2012-02-29 16:14             ` Oleg Nesterov
2012-02-29 16:33               ` Will Drewry
2012-02-29 17:09                 ` Oleg Nesterov
2012-02-29 17:41                   ` Roland McGrath
2012-02-29 17:51                     ` Will Drewry
2012-02-25  3:21 ` [PATCH v11 11/12] x86: Enable HAVE_ARCH_SECCOMP_FILTER Will Drewry
2012-02-25  3:21 ` [PATCH v11 12/12] Documentation: prctl/seccomp_filter 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=1330361396.2542.11.camel@localhost \
    --to=eparis@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=eric.dumazet@gmail.com \
    --cc=hpa@zytor.com \
    --cc=indan@nul.nu \
    --cc=kees@ubuntu.com \
    --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=oleg@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).