OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sandbox/linux/seccomp-bpf-helpers/baseline_policy.h" | 5 #include "sandbox/linux/seccomp-bpf-helpers/baseline_policy.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <fcntl.h> | 8 #include <fcntl.h> |
9 #include <linux/futex.h> | 9 #include <linux/futex.h> |
10 #include <sched.h> | 10 #include <sched.h> |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "base/macros.h" | 25 #include "base/macros.h" |
26 #include "base/posix/eintr_wrapper.h" | 26 #include "base/posix/eintr_wrapper.h" |
27 #include "base/threading/thread.h" | 27 #include "base/threading/thread.h" |
28 #include "build/build_config.h" | 28 #include "build/build_config.h" |
29 #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" | 29 #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" |
30 #include "sandbox/linux/seccomp-bpf/bpf_tests.h" | 30 #include "sandbox/linux/seccomp-bpf/bpf_tests.h" |
31 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" | 31 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" |
32 #include "sandbox/linux/seccomp-bpf/syscall.h" | 32 #include "sandbox/linux/seccomp-bpf/syscall.h" |
33 #include "sandbox/linux/services/android_futex.h" | 33 #include "sandbox/linux/services/android_futex.h" |
34 #include "sandbox/linux/services/linux_syscalls.h" | 34 #include "sandbox/linux/services/linux_syscalls.h" |
| 35 #include "sandbox/linux/services/syscall_wrappers.h" |
35 #include "sandbox/linux/services/thread_helpers.h" | 36 #include "sandbox/linux/services/thread_helpers.h" |
36 #include "sandbox/linux/tests/unit_tests.h" | 37 #include "sandbox/linux/tests/unit_tests.h" |
37 | 38 |
38 namespace sandbox { | 39 namespace sandbox { |
39 | 40 |
40 namespace { | 41 namespace { |
41 | 42 |
42 // |pid| is the return value of a fork()-like call. This | 43 // |pid| is the return value of a fork()-like call. This |
43 // makes sure that if fork() succeeded the child exits | 44 // makes sure that if fork() succeeded the child exits |
44 // and the parent waits for it. | 45 // and the parent waits for it. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 errno = 0; | 107 errno = 0; |
107 pid_t pid = fork(); | 108 pid_t pid = fork(); |
108 const int fork_errno = errno; | 109 const int fork_errno = errno; |
109 HandlePostForkReturn(pid); | 110 HandlePostForkReturn(pid); |
110 | 111 |
111 BPF_ASSERT_EQ(-1, pid); | 112 BPF_ASSERT_EQ(-1, pid); |
112 BPF_ASSERT_EQ(EPERM, fork_errno); | 113 BPF_ASSERT_EQ(EPERM, fork_errno); |
113 } | 114 } |
114 | 115 |
115 pid_t ForkX86Glibc() { | 116 pid_t ForkX86Glibc() { |
116 return syscall(__NR_clone, CLONE_PARENT_SETTID | SIGCHLD); | 117 return sys_clone(CLONE_PARENT_SETTID | SIGCHLD, 0, 0, 0, 0); |
117 } | 118 } |
118 | 119 |
119 BPF_TEST_C(BaselinePolicy, ForkX86Eperm, BaselinePolicy) { | 120 BPF_TEST_C(BaselinePolicy, ForkX86Eperm, BaselinePolicy) { |
120 errno = 0; | 121 errno = 0; |
121 pid_t pid = ForkX86Glibc(); | 122 pid_t pid = ForkX86Glibc(); |
122 const int fork_errno = errno; | 123 const int fork_errno = errno; |
123 HandlePostForkReturn(pid); | 124 HandlePostForkReturn(pid); |
124 | 125 |
125 BPF_ASSERT_EQ(-1, pid); | 126 BPF_ASSERT_EQ(-1, pid); |
126 BPF_ASSERT_EQ(EPERM, fork_errno); | 127 BPF_ASSERT_EQ(EPERM, fork_errno); |
127 } | 128 } |
128 | 129 |
129 pid_t ForkARMGlibc() { | 130 pid_t ForkARMGlibc() { |
130 return syscall(__NR_clone, | 131 return sys_clone(CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, 0, 0, |
131 CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD); | 132 0); |
132 } | 133 } |
133 | 134 |
134 BPF_TEST_C(BaselinePolicy, ForkArmEperm, BaselinePolicy) { | 135 BPF_TEST_C(BaselinePolicy, ForkArmEperm, BaselinePolicy) { |
135 errno = 0; | 136 errno = 0; |
136 pid_t pid = ForkARMGlibc(); | 137 pid_t pid = ForkARMGlibc(); |
137 const int fork_errno = errno; | 138 const int fork_errno = errno; |
138 HandlePostForkReturn(pid); | 139 HandlePostForkReturn(pid); |
139 | 140 |
140 BPF_ASSERT_EQ(-1, pid); | 141 BPF_ASSERT_EQ(-1, pid); |
141 BPF_ASSERT_EQ(EPERM, fork_errno); | 142 BPF_ASSERT_EQ(EPERM, fork_errno); |
142 } | 143 } |
143 | 144 |
144 BPF_TEST_C(BaselinePolicy, CreateThread, BaselinePolicy) { | 145 BPF_TEST_C(BaselinePolicy, CreateThread, BaselinePolicy) { |
145 base::Thread thread("sandbox_tests"); | 146 base::Thread thread("sandbox_tests"); |
146 BPF_ASSERT(thread.Start()); | 147 BPF_ASSERT(thread.Start()); |
147 } | 148 } |
148 | 149 |
149 BPF_DEATH_TEST_C(BaselinePolicy, | 150 BPF_DEATH_TEST_C(BaselinePolicy, |
150 DisallowedCloneFlagCrashes, | 151 DisallowedCloneFlagCrashes, |
151 DEATH_SEGV_MESSAGE(GetCloneErrorMessageContentForTests()), | 152 DEATH_SEGV_MESSAGE(GetCloneErrorMessageContentForTests()), |
152 BaselinePolicy) { | 153 BaselinePolicy) { |
153 pid_t pid = syscall(__NR_clone, CLONE_THREAD | SIGCHLD); | 154 pid_t pid = sys_clone(CLONE_THREAD | SIGCHLD, 0, 0, 0, 0); |
154 HandlePostForkReturn(pid); | 155 HandlePostForkReturn(pid); |
155 } | 156 } |
156 | 157 |
157 BPF_DEATH_TEST_C(BaselinePolicy, | 158 BPF_DEATH_TEST_C(BaselinePolicy, |
158 DisallowedKillCrashes, | 159 DisallowedKillCrashes, |
159 DEATH_SEGV_MESSAGE(GetKillErrorMessageContentForTests()), | 160 DEATH_SEGV_MESSAGE(GetKillErrorMessageContentForTests()), |
160 BaselinePolicy) { | 161 BaselinePolicy) { |
161 BPF_ASSERT_NE(1, getpid()); | 162 BPF_ASSERT_NE(1, getpid()); |
162 kill(1, 0); | 163 kill(1, 0); |
163 _exit(0); | 164 _exit(0); |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 ClockGettimeWithDisallowedClockCrashes, | 343 ClockGettimeWithDisallowedClockCrashes, |
343 DEATH_SEGV_MESSAGE(sandbox::GetErrorMessageContentForTests()), | 344 DEATH_SEGV_MESSAGE(sandbox::GetErrorMessageContentForTests()), |
344 BaselinePolicy) { | 345 BaselinePolicy) { |
345 struct timespec ts; | 346 struct timespec ts; |
346 clock_gettime(CLOCK_MONOTONIC_RAW, &ts); | 347 clock_gettime(CLOCK_MONOTONIC_RAW, &ts); |
347 } | 348 } |
348 | 349 |
349 } // namespace | 350 } // namespace |
350 | 351 |
351 } // namespace sandbox | 352 } // namespace sandbox |
OLD | NEW |