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!