aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/csource
diff options
context:
space:
mode:
authorAndrey Artemiev <artemiev@google.com>2022-07-12 17:06:16 -0700
committerAleksandr Nogikh <wp32pw@gmail.com>2022-07-19 19:37:54 +0200
commit775344bcdc412431da5fa825b1012f0290fc8064 (patch)
tree3f039e7c24f2242b354f65dc22b4b9e022a27423 /pkg/csource
parent72a3cc0c8dfd0116bb3ecf36eb5983ec3cae691c (diff)
executor: added code to run Android with System account
Diffstat (limited to 'pkg/csource')
-rw-r--r--pkg/csource/csource.go6
-rw-r--r--pkg/csource/gen.go4
-rw-r--r--pkg/csource/generated.go528
3 files changed, 520 insertions, 18 deletions
diff --git a/pkg/csource/csource.go b/pkg/csource/csource.go
index 55e52347c..7d3b133bf 100644
--- a/pkg/csource/csource.go
+++ b/pkg/csource/csource.go
@@ -96,7 +96,11 @@ func (ctx *context) generateSource() ([]byte, error) {
sandboxFunc := "loop();"
if ctx.opts.Sandbox != "" {
- sandboxFunc = "do_sandbox_" + ctx.opts.Sandbox + "();"
+ arguments := "();"
+ if ctx.opts.Sandbox == "android" {
+ arguments = "(0);"
+ }
+ sandboxFunc = "do_sandbox_" + ctx.opts.Sandbox + arguments
}
replacements := map[string]string{
"PROCS": fmt.Sprint(ctx.opts.Procs),
diff --git a/pkg/csource/gen.go b/pkg/csource/gen.go
index dea64bb39..120db74f5 100644
--- a/pkg/csource/gen.go
+++ b/pkg/csource/gen.go
@@ -51,6 +51,10 @@ func main() {
"arm_app_policy.h",
"x86_64_app_policy.h",
"x86_app_policy.h",
+ "arm64_system_policy.h",
+ "arm_system_policy.h",
+ "x86_64_system_policy.h",
+ "x86_system_policy.h",
}
data = replaceIncludes(androidFilenames, "../../executor/android/", data)
for _, remove := range []string{
diff --git a/pkg/csource/generated.go b/pkg/csource/generated.go
index 59c8e89ee..3963dc707 100644
--- a/pkg/csource/generated.go
+++ b/pkg/csource/generated.go
@@ -8721,6 +8721,61 @@ BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
static const struct sock_filter* primary_app_filter = arm64_app_filter;
static const size_t primary_app_filter_size = arm64_app_filter_size;
+
+const struct sock_filter arm64_system_filter[] = {
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 0, 0, 46),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 98, 44, 0),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 29, 43, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 226, 21, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 101, 11, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 43, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 30, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 19, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 18, 38, 37),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 29, 37, 36),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 42, 36, 35),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 99, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 59, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 58, 33, 32),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 98, 32, 31),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 100, 31, 30),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 203, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 198, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 105, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 104, 27, 26),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 180, 26, 25),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 202, 25, 24),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 220, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 217, 23, 22),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 224, 22, 21),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 424, 11, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 266, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 260, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 240, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 234, 17, 16),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 244, 16, 15),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 262, 15, 14),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 291, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 274, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 272, 12, 11),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 288, 11, 10),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 292, 10, 9),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 438, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 436, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 434, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 425, 6, 5),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 435, 5, 4),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 437, 4, 3),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 440, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 439, 2, 1),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 441, 1, 0),
+BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
+};
+
+#define arm64_system_filter_size (sizeof(arm64_system_filter) / sizeof(struct sock_filter))
+
+static const struct sock_filter* system_filter = arm64_system_filter;
+static const size_t system_filter_size = arm64_system_filter_size;
#define kFilterMaxSize (arm64_app_filter_size + 3 + 1 + 4 + 2)
#elif GOARCH_arm
@@ -8880,6 +8935,157 @@ BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
static const struct sock_filter* primary_app_filter = arm_app_filter;
static const size_t primary_app_filter_size = arm_app_filter_size;
+
+const struct sock_filter arm_system_filter[] = {
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 0, 0, 142),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 240, 140, 0),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 54, 139, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 197, 69, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 91, 35, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 51, 17, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 36, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 19, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 11, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 3, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 2, 132, 131),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 7, 131, 130),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 13, 130, 129),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 26, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 22, 128, 127),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 27, 127, 126),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 43, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 41, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 38, 124, 123),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 42, 123, 122),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 45, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 44, 121, 120),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 46, 120, 119),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 74, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 64, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 60, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 57, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 53, 115, 114),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 58, 114, 113),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 62, 113, 112),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 66, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 65, 111, 110),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 68, 110, 109),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 85, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 77, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 76, 107, 106),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 80, 106, 105),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 88, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 86, 104, 103),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 89, 103, 102),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 131, 17, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 116, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 103, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 96, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 94, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 93, 97, 96),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 95, 96, 95),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 98, 95, 94),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 114, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 107, 93, 92),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 115, 92, 91),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 124, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 118, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 117, 89, 88),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 123, 88, 87),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 128, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 126, 86, 85),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 130, 85, 84),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 150, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 138, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 136, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 134, 81, 80),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 137, 80, 79),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 143, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 141, 78, 77),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 149, 77, 76),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 183, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 172, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 164, 74, 73),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 182, 73, 72),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 190, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 188, 71, 70),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 196, 70, 69),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 345, 35, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 270, 17, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 224, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 217, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 213, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 199, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 198, 63, 62),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 212, 62, 61),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 215, 61, 60),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 219, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 218, 59, 58),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 222, 58, 57),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 251, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 241, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 240, 55, 54),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 249, 54, 53),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 256, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 252, 52, 51),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 269, 51, 50),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 317, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 290, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 286, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 280, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 271, 46, 45),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 285, 45, 44),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 289, 44, 43),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 292, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 291, 42, 41),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 298, 41, 40),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 327, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 322, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 319, 38, 37),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 326, 37, 36),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 340, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 339, 35, 34),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 344, 34, 33),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 417, 17, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 372, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 352, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 350, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 348, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 347, 28, 27),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 349, 27, 26),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 351, 26, 25),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 369, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 367, 24, 23),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 370, 23, 22),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 397, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 380, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 378, 20, 19),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 394, 19, 18),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 403, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 398, 17, 16),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 415, 16, 15),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 438, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 434, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 420, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 418, 12, 11),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 425, 11, 10),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 436, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 435, 9, 8),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 437, 8, 7),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 983042, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 440, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 439, 5, 4),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 441, 4, 3),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 983045, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 983043, 2, 1),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 983046, 1, 0),
+BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
+};
+
+#define arm_system_filter_size (sizeof(arm_system_filter) / sizeof(struct sock_filter))
+
+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
@@ -9007,6 +9213,115 @@ BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
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;
+
+const sock_filter x86_64_system_filter[] = {
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 0, 0, 100),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 202, 98, 0),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 16, 97, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 203, 49, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 93, 25, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 44, 13, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 32, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 17, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 8, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 6, 91, 90),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 16, 90, 89),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 24, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 21, 88, 87),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 29, 87, 86),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 38, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 35, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 33, 84, 83),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 37, 83, 82),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 43, 82, 81),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 79, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 72, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 58, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 57, 78, 77),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 64, 77, 76),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 78, 76, 75),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 91, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 89, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 82, 73, 72),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 90, 72, 71),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 92, 71, 70),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 155, 11, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 135, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 112, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 95, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 94, 66, 65),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 111, 65, 64),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 132, 64, 63),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 140, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 137, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 136, 61, 60),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 139, 60, 59),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 153, 59, 58),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 175, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 169, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 157, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 156, 55, 54),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 167, 54, 53),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 172, 53, 52),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 186, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 179, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 177, 50, 49),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 180, 49, 48),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 201, 48, 47),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 283, 23, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 251, 11, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 221, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 217, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 206, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 205, 42, 41),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 211, 41, 40),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 220, 40, 39),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 247, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 233, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 232, 37, 36),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 235, 36, 35),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 248, 35, 34),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 262, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 257, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 254, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 253, 31, 30),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 256, 30, 29),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 261, 29, 28),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 280, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 275, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 274, 26, 25),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 279, 25, 24),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 282, 24, 23),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 332, 11, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 305, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 302, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 285, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 284, 19, 18),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 300, 18, 17),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 303, 17, 16),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 321, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 314, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 312, 14, 13),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 320, 13, 12),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 329, 12, 11),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 436, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 434, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 424, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 333, 8, 7),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 425, 7, 6),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 435, 6, 5),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 440, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 438, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 437, 3, 2),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 439, 2, 1),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 441, 1, 0),
+BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
+};
+
+#define x86_64_system_filter_size (sizeof(x86_64_system_filter) / sizeof(struct sock_filter))
+
+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
@@ -9160,6 +9475,151 @@ BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
static const struct sock_filter* primary_app_filter = x86_app_filter;
static const size_t primary_app_filter_size = x86_app_filter_size;
+
+const struct sock_filter x86_system_filter[] = {
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 0, 0, 136),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 240, 134, 0),
+BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 54, 133, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 190, 67, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 88, 33, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 51, 17, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 36, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 19, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 11, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 3, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 2, 126, 125),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 7, 125, 124),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 13, 124, 123),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 26, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 22, 122, 121),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 27, 121, 120),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 43, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 41, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 38, 118, 117),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 42, 117, 116),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 45, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 44, 115, 114),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 46, 114, 113),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 66, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 60, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 57, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 53, 110, 109),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 58, 109, 108),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 64, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 62, 107, 106),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 65, 106, 105),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 77, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 74, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 68, 103, 102),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 76, 102, 101),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 85, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 80, 100, 99),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 86, 99, 98),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 128, 17, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 114, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 96, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 94, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 91, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 89, 93, 92),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 93, 92, 91),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 95, 91, 90),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 102, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 98, 89, 88),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 107, 88, 87),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 118, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 116, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 115, 85, 84),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 117, 84, 83),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 124, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 123, 82, 81),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 126, 81, 80),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 143, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 136, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 131, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 130, 77, 76),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 134, 76, 75),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 138, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 137, 74, 73),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 141, 73, 72),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 172, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 150, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 149, 70, 69),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 164, 69, 68),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 183, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 182, 67, 66),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 188, 66, 65),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 318, 33, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 255, 17, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 224, 9, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 213, 5, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 199, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 197, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 196, 59, 58),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 198, 58, 57),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 212, 57, 56),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 218, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 215, 55, 54),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 222, 54, 53),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 245, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 241, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 240, 51, 50),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 244, 50, 49),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 252, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 250, 48, 47),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 253, 47, 46),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 292, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 272, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 258, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 256, 43, 42),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 271, 42, 41),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 284, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 273, 40, 39),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 285, 39, 38),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 300, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 295, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 294, 36, 35),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 299, 35, 34),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 313, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 312, 33, 32),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 317, 32, 31),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 383, 15, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 343, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 324, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 322, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 321, 27, 26),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 323, 26, 25),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 340, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 337, 24, 23),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 341, 23, 22),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 351, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 346, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 345, 20, 19),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 349, 19, 18),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 374, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 359, 17, 16),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 380, 16, 15),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 434, 7, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 417, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 403, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 384, 12, 11),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 415, 11, 10),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 420, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 418, 9, 8),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 425, 8, 7),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 438, 3, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 436, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 435, 5, 4),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 437, 4, 3),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 440, 1, 0),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 439, 2, 1),
+BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 441, 1, 0),
+BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
+};
+
+#define x86_system_filter_size (sizeof(x86_system_filter) / sizeof(struct sock_filter))
+
+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
@@ -9210,22 +9670,33 @@ static void install_filter(const Filter* f)
if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog) < 0)
failmsg("could not set seccomp filter", "size=%zu", f->count);
}
-static void set_app_seccomp_filter()
+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);
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);
+ }
+}
+
#if GOARCH_amd64 || GOARCH_386
inline int mkdir(const char* path, mode_t mode)
@@ -9258,6 +9729,9 @@ inline int symlink(const char* old_path, const char* new_path)
#define UNTRUSTED_APP_UID (AID_APP + 999)
#define UNTRUSTED_APP_GID (AID_APP + 999)
+#define SYSTEM_UID 1000
+#define SYSTEM_GID 1000
+
const char* const SELINUX_CONTEXT_UNTRUSTED_APP = "u:r:untrusted_app:s0:c512,c768";
const char* const SELINUX_LABEL_APP_DATA_FILE = "u:object_r:app_data_file:s0:c512,c768";
const char* const SELINUX_CONTEXT_FILE = "/proc/thread-self/attr/current";
@@ -9265,6 +9739,9 @@ const char* const SELINUX_XATTR_NAME = "security.selinux";
const gid_t UNTRUSTED_APP_GROUPS[] = {UNTRUSTED_APP_GID, AID_NET_BT_ADMIN, AID_NET_BT, AID_INET, AID_EVERYBODY};
const size_t UNTRUSTED_APP_NUM_GROUPS = sizeof(UNTRUSTED_APP_GROUPS) / sizeof(UNTRUSTED_APP_GROUPS[0]);
+
+const gid_t SYSTEM_GROUPS[] = {SYSTEM_GID, AID_NET_BT_ADMIN, AID_NET_BT, AID_INET, AID_EVERYBODY};
+const size_t SYSTEM_NUM_GROUPS = sizeof(SYSTEM_GROUPS) / sizeof(SYSTEM_GROUPS[0]);
static void getcon(char* context, size_t context_size)
{
int fd = open(SELINUX_CONTEXT_FILE, O_RDONLY);
@@ -9311,7 +9788,8 @@ static void setfilecon(const char* path, const char* context)
}
#define SYZ_HAVE_SANDBOX_ANDROID 1
-static int do_sandbox_android(void)
+
+static int do_sandbox_android(int sandbox_arg)
{
setup_common();
#if SYZ_EXECUTOR || SYZ_VHCI_INJECTION
@@ -9327,29 +9805,45 @@ static int do_sandbox_android(void)
initialize_devlink_pci();
#endif
#if SYZ_EXECUTOR || SYZ_NET_INJECTION
- initialize_tun();
+ if (sandbox_arg != 1) {
+ initialize_tun();
+ }
#endif
#if SYZ_EXECUTOR || SYZ_NET_DEVICES
initialize_netdevices();
#endif
+ uid_t uid = UNTRUSTED_APP_UID;
+ size_t num_groups = UNTRUSTED_APP_NUM_GROUPS;
+ const gid_t* groups = UNTRUSTED_APP_GROUPS;
+ gid_t gid = UNTRUSTED_APP_GID;
+ if (sandbox_arg == 1) {
+ uid = SYSTEM_UID;
+ num_groups = SYSTEM_NUM_GROUPS;
+ groups = SYSTEM_GROUPS;
+ gid = SYSTEM_GID;
- if (chown(".", UNTRUSTED_APP_UID, UNTRUSTED_APP_UID) != 0)
- fail("do_sandbox_android: chmod failed");
+ debug("fuzzing under SYSTEM account\n");
+ }
+ if (chown(".", uid, uid) != 0)
+ failmsg("do_sandbox_android: chmod failed", "sandbox_arg=%d", sandbox_arg);
- if (setgroups(UNTRUSTED_APP_NUM_GROUPS, UNTRUSTED_APP_GROUPS) != 0)
- fail("do_sandbox_android: setgroups failed");
+ if (setgroups(num_groups, groups) != 0)
+ failmsg("do_sandbox_android: setgroups failed", "sandbox_arg=%d", sandbox_arg);
- if (setresgid(UNTRUSTED_APP_GID, UNTRUSTED_APP_GID, UNTRUSTED_APP_GID) != 0)
- fail("do_sandbox_android: setresgid failed");
+ if (setresgid(gid, gid, gid) != 0)
+ failmsg("do_sandbox_android: setresgid failed", "sandbox_arg=%d", sandbox_arg);
setup_binderfs();
#if GOARCH_arm || GOARCH_arm64 || GOARCH_386 || GOARCH_amd64
- set_app_seccomp_filter();
+ int account = SCFS_RestrictedApp;
+ if (sandbox_arg == 1)
+ account = SCFS_SystemAccount;
+ set_app_seccomp_filter(account);
#endif
- if (setresuid(UNTRUSTED_APP_UID, UNTRUSTED_APP_UID, UNTRUSTED_APP_UID) != 0)
- fail("do_sandbox_android: setresuid failed");
+ if (setresuid(uid, uid, uid) != 0)
+ failmsg("do_sandbox_android: setresuid failed", "sandbox_arg=%d", sandbox_arg);
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
setfilecon(".", SELINUX_LABEL_APP_DATA_FILE);