[Libreoffice-commits] online.git: common/Seccomp.cpp
Corentin Noël (via logerrit)
logerrit at kemper.freedesktop.org
Fri Nov 22 17:49:26 UTC 2019
common/Seccomp.cpp | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
New commits:
commit 08aa7d9149bea918386a3dc4475e130bfe93917e
Author: Corentin Noël <corentin.noel at collabora.com>
AuthorDate: Fri Nov 22 16:49:28 2019 +0100
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Nov 22 18:49:00 2019 +0100
Seccomp: add ARM support
Change-Id: I6982c6e68da5e2211f9dad0eb88fccab27230ed9
Reviewed-on: https://gerrit.libreoffice.org/83511
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Tested-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/common/Seccomp.cpp b/common/Seccomp.cpp
index 534c3ce7b..c22937f9f 100644
--- a/common/Seccomp.cpp
+++ b/common/Seccomp.cpp
@@ -42,7 +42,12 @@
#if defined(__x86_64__)
# define AUDIT_ARCH_NR AUDIT_ARCH_X86_64
-# define REG_SYSCALL REG_RAX
+# define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.gregs[(_reg)])
+# define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, REG_RAX)
+#elif defined(__arm__)
+# define AUDIT_ARCH_NR AUDIT_ARCH_ARM
+# define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.arm_##_reg)
+# define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, r7)
#else
# error "Platform does not support seccomp filtering yet - unsafe."
#endif
@@ -65,7 +70,7 @@ static void handleSysSignal(int /* signal */,
if (info->si_code != SYS_SECCOMP || !uctx)
return;
- unsigned int syscall = uctx->uc_mcontext.gregs[REG_SYSCALL];
+ unsigned int syscall = SECCOMP_SYSCALL (uctx);
Log::signalLogPrefix();
Log::signalLog(" seccomp trapped signal, un-authorized sys-call: ");
@@ -92,10 +97,13 @@ bool lockdown(Type type)
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_##name, 0, 1), \
BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW)
- #define KILL_SYSCALL(name) \
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_##name, 0, 1), \
+ #define KILL_SYSCALL_FULL(fullname) \
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, fullname, 0, 1), \
BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_TRAP)
+ #define KILL_SYSCALL(name) \
+ KILL_SYSCALL_FULL(__NR_##name)
+
struct sock_filter filterCode[] = {
// Check our architecture is correct.
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, offsetof(struct seccomp_data, arch)),
@@ -145,7 +153,12 @@ bool lockdown(Type type)
KILL_SYSCALL(uselib),
KILL_SYSCALL(personality), // !
KILL_SYSCALL(vhangup),
+#ifdef __NR_modify_ldt
KILL_SYSCALL(modify_ldt), // !
+#endif
+#ifdef __PNR_modify_ldt
+ KILL_SYSCALL_FULL(__PNR_modify_ldt), // !
+#endif
KILL_SYSCALL(pivot_root), // !
KILL_SYSCALL(chroot),
KILL_SYSCALL(acct), // !
More information about the Libreoffice-commits
mailing list