diff options
Diffstat (limited to 'features/seccomp/arch-x86-add-syscall_get_arch-to-syscall.h.patch')
-rw-r--r-- | features/seccomp/arch-x86-add-syscall_get_arch-to-syscall.h.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/features/seccomp/arch-x86-add-syscall_get_arch-to-syscall.h.patch b/features/seccomp/arch-x86-add-syscall_get_arch-to-syscall.h.patch new file mode 100644 index 00000000..841ccffc --- /dev/null +++ b/features/seccomp/arch-x86-add-syscall_get_arch-to-syscall.h.patch @@ -0,0 +1,85 @@ +From d581579e1974f5bd2ff3bb5b93240aa5ccf2f907 Mon Sep 17 00:00:00 2001 +From: Will Drewry <wad@chromium.org> +Date: Thu, 12 Apr 2012 16:47:56 -0500 +Subject: [PATCH] arch/x86: add syscall_get_arch to syscall.h + +commit b7456536cf9466b402b540c5588d79a4177c723a upstream. + +Add syscall_get_arch() to export the current AUDIT_ARCH_* based on system call +entry path. + +Signed-off-by: Will Drewry <wad@chromium.org> +Acked-by: Serge Hallyn <serge.hallyn@canonical.com> +Reviewed-by: H. Peter Anvin <hpa@zytor.com> +Acked-by: Eric Paris <eparis@redhat.com> +Reviewed-by: Kees Cook <keescook@chromium.org> + +v18: - update comment about x32 tasks + - rebase to v3.4-rc2 +v17: rebase and reviewed-by +v14: rebase/nochanges +v13: rebase on to 88ebdda6159ffc15699f204c33feb3e431bf9bdc +Signed-off-by: James Morris <james.l.morris@oracle.com> +Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> +--- + arch/x86/include/asm/syscall.h | 27 +++++++++++++++++++++++++++ + 1 files changed, 27 insertions(+), 0 deletions(-) + +diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h +index 386b786..1ace47b 100644 +--- a/arch/x86/include/asm/syscall.h ++++ b/arch/x86/include/asm/syscall.h +@@ -13,9 +13,11 @@ + #ifndef _ASM_X86_SYSCALL_H + #define _ASM_X86_SYSCALL_H + ++#include <linux/audit.h> + #include <linux/sched.h> + #include <linux/err.h> + #include <asm/asm-offsets.h> /* For NR_syscalls */ ++#include <asm/thread_info.h> /* for TS_COMPAT */ + #include <asm/unistd.h> + + extern const unsigned long sys_call_table[]; +@@ -88,6 +90,12 @@ static inline void syscall_set_arguments(struct task_struct *task, + memcpy(®s->bx + i, args, n * sizeof(args[0])); + } + ++static inline int syscall_get_arch(struct task_struct *task, ++ struct pt_regs *regs) ++{ ++ return AUDIT_ARCH_I386; ++} ++ + #else /* CONFIG_X86_64 */ + + static inline void syscall_get_arguments(struct task_struct *task, +@@ -212,6 +220,25 @@ static inline void syscall_set_arguments(struct task_struct *task, + } + } + ++static inline int syscall_get_arch(struct task_struct *task, ++ struct pt_regs *regs) ++{ ++#ifdef CONFIG_IA32_EMULATION ++ /* ++ * TS_COMPAT is set for 32-bit syscall entry and then ++ * remains set until we return to user mode. ++ * ++ * TIF_IA32 tasks should always have TS_COMPAT set at ++ * system call time. ++ * ++ * x32 tasks should be considered AUDIT_ARCH_X86_64. ++ */ ++ if (task_thread_info(task)->status & TS_COMPAT) ++ return AUDIT_ARCH_I386; ++#endif ++ /* Both x32 and x86_64 are considered "64-bit". */ ++ return AUDIT_ARCH_X86_64; ++} + #endif /* CONFIG_X86_32 */ + + #endif /* _ASM_X86_SYSCALL_H */ +-- +1.7.9.1 + |