Index: sandbox/linux/seccomp-bpf/linux_seccomp.h |
diff --git a/sandbox/linux/seccomp-bpf/linux_seccomp.h b/sandbox/linux/seccomp-bpf/linux_seccomp.h |
index 0de0259da39ecdb745e5923b9a6ff3961c13be00..f45d6b731f8b4c03ac3a2699db96f6bb181c4855 100644 |
--- a/sandbox/linux/seccomp-bpf/linux_seccomp.h |
+++ b/sandbox/linux/seccomp-bpf/linux_seccomp.h |
@@ -16,6 +16,13 @@ |
#include <asm/unistd.h> |
#include <linux/filter.h> |
+// Old Bionic versions do not have sys/user.h. The if can be removed once we no |
+// longer need to support these old Bionic versions. |
+#include <sys/cdefs.h> |
+#if !defined(__BIONIC__) |
+#include <sys/user.h> |
+#endif |
+ |
// For audit.h |
#ifndef EM_ARM |
#define EM_ARM 40 |
@@ -124,6 +131,17 @@ |
#define SECCOMP_ARG_LSB_IDX(nr) (offsetof(struct arch_seccomp_data, args) + \ |
8*(nr) + 0) |
+typedef user_regs_struct regs_struct; |
+#define SECCOMP_PT_RESULT(_regs) (_regs).eax |
+#define SECCOMP_PT_SYSCALL(_regs) (_regs).orig_eax |
+#define SECCOMP_PT_IP(_regs) (_regs).eip |
+#define SECCOMP_PT_PARM1(_regs) (_regs).ebx |
+#define SECCOMP_PT_PARM2(_regs) (_regs).ecx |
+#define SECCOMP_PT_PARM3(_regs) (_regs).edx |
+#define SECCOMP_PT_PARM4(_regs) (_regs).esi |
+#define SECCOMP_PT_PARM5(_regs) (_regs).edi |
+#define SECCOMP_PT_PARM6(_regs) (_regs).ebp |
+ |
#elif defined(__x86_64__) |
#define MIN_SYSCALL 0u |
#define MAX_PUBLIC_SYSCALL 1024u |
@@ -151,6 +169,17 @@ |
#define SECCOMP_ARG_LSB_IDX(nr) (offsetof(struct arch_seccomp_data, args) + \ |
8*(nr) + 0) |
+typedef user_regs_struct regs_struct; |
+#define SECCOMP_PT_RESULT(_regs) (_regs).rax |
+#define SECCOMP_PT_SYSCALL(_regs) (_regs).orig_rax |
+#define SECCOMP_PT_IP(_regs) (_regs).rip |
+#define SECCOMP_PT_PARM1(_regs) (_regs).rdi |
+#define SECCOMP_PT_PARM2(_regs) (_regs).rsi |
+#define SECCOMP_PT_PARM3(_regs) (_regs).rdx |
+#define SECCOMP_PT_PARM4(_regs) (_regs).r10 |
+#define SECCOMP_PT_PARM5(_regs) (_regs).r8 |
+#define SECCOMP_PT_PARM6(_regs) (_regs).r9 |
+ |
#elif defined(__arm__) && (defined(__thumb__) || defined(__ARM_EABI__)) |
// ARM EABI includes "ARM private" system calls starting at |__ARM_NR_BASE|, |
// and a "ghost syscall private to the kernel", cmpxchg, |
@@ -189,6 +218,46 @@ |
#define SECCOMP_ARG_LSB_IDX(nr) (offsetof(struct arch_seccomp_data, args) + \ |
8*(nr) + 0) |
+#if defined(__BIONIC__) |
+// Old Bionic versions don't have sys/user.h, so we just define regs_struct |
+// directly. This can be removed once we no longer need to support these old |
+// Bionic versions. |
+struct regs_struct { |
+ unsigned long uregs[18]; |
+}; |
+#else |
+typedef user_regs regs_struct; |
+#endif |
+ |
+#define REG_cpsr uregs[16] |
+#define REG_pc uregs[15] |
+#define REG_lr uregs[14] |
+#define REG_sp uregs[13] |
+#define REG_ip uregs[12] |
+#define REG_fp uregs[11] |
+#define REG_r10 uregs[10] |
+#define REG_r9 uregs[9] |
+#define REG_r8 uregs[8] |
+#define REG_r7 uregs[7] |
+#define REG_r6 uregs[6] |
+#define REG_r5 uregs[5] |
+#define REG_r4 uregs[4] |
+#define REG_r3 uregs[3] |
+#define REG_r2 uregs[2] |
+#define REG_r1 uregs[1] |
+#define REG_r0 uregs[0] |
+#define REG_ORIG_r0 uregs[17] |
+ |
+#define SECCOMP_PT_RESULT(_regs) (_regs).REG_r0 |
+#define SECCOMP_PT_SYSCALL(_regs) (_regs).REG_r7 |
+#define SECCOMP_PT_IP(_regs) (_regs).REG_pc |
+#define SECCOMP_PT_PARM1(_regs) (_regs).REG_r0 |
+#define SECCOMP_PT_PARM2(_regs) (_regs).REG_r1 |
+#define SECCOMP_PT_PARM3(_regs) (_regs).REG_r2 |
+#define SECCOMP_PT_PARM4(_regs) (_regs).REG_r3 |
+#define SECCOMP_PT_PARM5(_regs) (_regs).REG_r4 |
+#define SECCOMP_PT_PARM6(_regs) (_regs).REG_r5 |
+ |
#else |
#error Unsupported target platform |