aboutsummaryrefslogtreecommitdiffstats
path: root/executor/android/android_seccomp.h
diff options
context:
space:
mode:
Diffstat (limited to 'executor/android/android_seccomp.h')
-rw-r--r--executor/android/android_seccomp.h37
1 files changed, 30 insertions, 7 deletions
diff --git a/executor/android/android_seccomp.h b/executor/android/android_seccomp.h
index f3febac2c..8546350c5 100644
--- a/executor/android/android_seccomp.h
+++ b/executor/android/android_seccomp.h
@@ -7,6 +7,9 @@
#include "arm64_app_policy.h"
static const struct sock_filter* primary_app_filter = arm64_app_filter;
static const size_t primary_app_filter_size = arm64_app_filter_size;
+#include "arm64_system_policy.h"
+static const struct sock_filter* system_filter = arm64_system_filter;
+static const size_t system_filter_size = arm64_system_filter_size;
// We need 3 for ValidateArchitecture and 1 for ExamineSyscall and 4 for ValidateArchitectureAndJumpIfNeeded + 2 extra Disallow
#define kFilterMaxSize (arm64_app_filter_size + 3 + 1 + 4 + 2)
@@ -15,6 +18,9 @@ static const size_t primary_app_filter_size = arm64_app_filter_size;
#include "arm_app_policy.h"
static const struct sock_filter* primary_app_filter = arm_app_filter;
static const size_t primary_app_filter_size = arm_app_filter_size;
+#include "arm_system_policy.h"
+static const struct sock_filter* system_filter = arm_system_filter;
+static const size_t system_filter_size = arm_system_filter_size;
#define kFilterMaxSize (arm_app_filter_size + 3 + 1 + 4 + 2)
#elif GOARCH_amd64
@@ -22,6 +28,9 @@ static const size_t primary_app_filter_size = arm_app_filter_size;
#include "x86_64_app_policy.h"
static const struct sock_filter* primary_app_filter = x86_64_app_filter;
static const size_t primary_app_filter_size = x86_64_app_filter_size;
+#include "x86_64_system_policy.h"
+static const struct sock_filter* system_filter = x86_64_system_filter;
+static const size_t system_filter_size = x86_64_system_filter_size;
#define kFilterMaxSize (x86_64_app_filter_size + 3 + 1 + 4 + 2)
#elif GOARCH_386
@@ -29,6 +38,9 @@ static const size_t primary_app_filter_size = x86_64_app_filter_size;
#include "x86_app_policy.h"
static const struct sock_filter* primary_app_filter = x86_app_filter;
static const size_t primary_app_filter_size = x86_app_filter_size;
+#include "x86_system_policy.h"
+static const struct sock_filter* system_filter = x86_system_filter;
+static const size_t system_filter_size = x86_system_filter_size;
#define kFilterMaxSize (x86_app_filter_size + 3 + 1 + 4 + 2)
#else
@@ -83,21 +95,32 @@ static void install_filter(const Filter* f)
failmsg("could not set seccomp filter", "size=%zu", f->count);
}
-// Modified from the orignal Android code as we don't need dual arch support
-static void set_app_seccomp_filter()
+// Modified from the original Android code as we don't need dual arch support
+static void set_seccomp_filter(const struct sock_filter* filter, size_t size)
{
- const struct sock_filter* p = primary_app_filter;
- size_t p_size = primary_app_filter_size;
-
Filter f;
f.count = 0;
ValidateArchitecture(&f);
ExamineSyscall(&f);
- for (size_t i = 0; i < p_size; ++i)
- push_back(&f, p[i]);
+ for (size_t i = 0; i < size; ++i)
+ push_back(&f, filter[i]);
Disallow(&f);
// Will fail() if anything fails.
install_filter(&f);
}
+
+enum {
+ SCFS_RestrictedApp,
+ SCFS_SystemAccount
+};
+
+static void set_app_seccomp_filter(int account)
+{
+ if (account == SCFS_SystemAccount) {
+ set_seccomp_filter(system_filter, system_filter_size);
+ } else {
+ set_seccomp_filter(primary_app_filter, primary_app_filter_size);
+ }
+}