Thread (50 messages) 50 messages, 8 authors, 2012-02-21

Re: [PATCH v8 3/8] seccomp: add system call filtering using BPF

From: Will Drewry <wad@chromium.org>
Date: 2012-02-17 03:53:58
Also in: linux-arch, lkml

On Thu, Feb 16, 2012 at 6:50 PM, Eric Paris [off-list ref] wrote:
On Thu, 2012-02-16 at 17:00 -0600, Will Drewry wrote:
quoted
On Thu, Feb 16, 2012 at 4:06 PM, H. Peter Anvin [off-list ref] wrote:
quoted
On 02/16/2012 01:51 PM, Will Drewry wrote:
quoted
Then syscall_namespace(current, regs) returns
* 0 - SYSCALL_NS_32 (for existing 32 and config_compat)
* 1 - SYSCALL_NS_64 (for existing 64 bit)
* 2 - SYSCALL_NS_X32 (everything after 2 is arch specific)
* ..

This patch series is pegged to x86 right now, so it's not a big deal
to add a simple syscall_namespace to asm/syscall.h.  Of course, the
code is always the easy part.  Even easier would be to only assign 0
and 1 in the seccomp_data for 32-bit or 64-bit, then leave the rest of
the u32 untouched until x32 stabilizes and the TS_COMPAT interactions
are sorted.
I don't know if anyone cares, but include/linux/audit.h tries to expose
this type of information so audit userspace can later piece things back
together.  (we get this info from the syscall entry exit code so we know
which arch it is).

Not sure how x32 is hoping to expose its syscall info, but others are
going to have the same/similar problem.
An earlier change Roland had prodded me toward was adding a
syscall_get_arch() call to asm/syscall.h which returned the
appropriate audit arch value for the current calling convention.  I
hate to suggest this, but should I go ahead and wire that up for x86
now, make it a dependency for HAVE_ARCH_SECCOMP_FILTER (and officially
part of asm/syscall.h) then let it trickle into existence?  Maybe
something like:

static inline int syscall_get_arch(struct task_struct *task, struct
pt_regs *regs)
{
#ifdef CONFIG_IA32_EMULATION
  if (task_thread_info(task)->status & TS_COMPAT)
    return AUDIT_ARCH_I386;
#endif
#ifdef CONFIG_64BIT
  return AUDIT_ARCH_X86_64;
#else
  return AUDIT_ARCH_I386;
#endif
}

There would be no other callers, though, because everywhere AUDIT_ARCH
is used it is hardcoded as appropriate.  Then when x32 comes along, it
can figure out where it belongs using tif status and/or regs.

I'm not sure what the appropriate way to add things to asm/syscall.h,
but I can certainly do a first cut in the x86 version.

thanks!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help