Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(310)

Unified Diff: content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc

Issue 1669043003: [Android] Fix Microdump generation when Seccomp-BPF is enabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restrict socket() args Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc
diff --git a/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc b/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc
index c3b1605fc7dc6f091ae5456aad0371bcf2ee7c1a..0550b0d810ee5dbcf41164b0397231f1c78834fd 100644
--- a/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc
+++ b/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc
@@ -4,17 +4,28 @@
#include "content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.h"
+#include <linux/net.h>
+#include <sys/socket.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include "build/build_config.h"
#include "sandbox/linux/bpf_dsl/bpf_dsl.h"
+using sandbox::bpf_dsl::AllOf;
using sandbox::bpf_dsl::Allow;
+using sandbox::bpf_dsl::AnyOf;
+using sandbox::bpf_dsl::Arg;
+using sandbox::bpf_dsl::If;
+using sandbox::bpf_dsl::Error;
using sandbox::bpf_dsl::ResultExpr;
namespace content {
+#ifndef SOCK_TYPE_MASK
+#define SOCK_TYPE_MASK 0xf
+#endif
+
SandboxBPFBasePolicyAndroid::SandboxBPFBasePolicyAndroid()
: SandboxBPFBasePolicy() {}
@@ -30,8 +41,10 @@ ResultExpr SandboxBPFBasePolicyAndroid::EvaluateSyscall(int sysno) const {
case __NR_flock:
#if defined(__x86_64__) || defined(__aarch64__)
case __NR_newfstatat:
+ case __NR_getdents64:
#elif defined(__i386__) || defined(__arm__) || defined(__mips__)
case __NR_fstatat64:
+ case __NR_getdents:
#endif
case __NR_getpriority:
case __NR_ioctl:
@@ -56,10 +69,29 @@ ResultExpr SandboxBPFBasePolicyAndroid::EvaluateSyscall(int sysno) const {
case __NR_getrlimit:
#endif
case __NR_uname:
+
+ // Permit socket operations so that renderers can connect to logd and
+ // debuggerd. The arguments to socket() are further restricted below.
+ case __NR_socket:
+ case __NR_connect:
+
+ // Ptrace is allowed so the Breakpad Microdumper can fork in a renderer
+ // and then ptrace the parent.
+ case __NR_ptrace:
override_and_allow = true;
break;
}
+ if (sysno == __NR_socket) {
+ const Arg<int> domain(0);
+ const Arg<int> type(1);
+ return If(AllOf(AnyOf(domain == PF_LOCAL, domain == PF_UNIX),
mdempsky 2016/02/05 20:14:02 Nit: Unless Android is goofy, I would just check f
Robert Sesek 2016/02/05 21:27:06 Android isn't goofy, IMO PF is more semantically c
mdempsky 2016/02/05 22:56:55 Agreed that historically PF was more semantically
+ AnyOf((type & SOCK_TYPE_MASK) == SOCK_DGRAM,
mdempsky 2016/02/05 20:14:02 Any opinions on writing this instead as: const
Robert Sesek 2016/02/05 21:27:06 I like that. Prevent extra bits being set.
+ (type & SOCK_TYPE_MASK) == SOCK_STREAM)),
+ Allow())
+ .Else(Error(EPERM));
+ }
+
if (override_and_allow)
return Allow();
« no previous file with comments | « no previous file | sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698