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
3 # found in the LICENSE file.
5 import("//build/config/features.gni")
6 import("//testing/test.gni")
9 compile_suid_client = is_linux
11 compile_credentials = is_linux
13 compile_seccomp_bpf_demo =
14 is_linux && (current_cpu == "x86" || current_cpu == "x64")
17 # We have two principal targets: sandbox and sandbox_linux_unittests
18 # All other targets are listed as dependencies.
19 # There is one notable exception: for historical reasons, chrome_sandbox is
20 # the setuid sandbox and is its own target.
27 if (compile_suid_client) {
28 deps += [ ":suid_sandbox_client" ]
30 if (use_seccomp_bpf) {
33 ":seccomp_bpf_helpers",
38 source_set("sandbox_linux_test_utils") {
41 "tests/sandbox_test_runner.cc",
42 "tests/sandbox_test_runner.h",
43 "tests/sandbox_test_runner_function_pointer.cc",
44 "tests/sandbox_test_runner_function_pointer.h",
45 "tests/test_utils.cc",
47 "tests/unit_tests.cc",
55 if (use_seccomp_bpf) {
57 "seccomp-bpf/bpf_tester_compatibility_delegate.h",
58 "seccomp-bpf/bpf_tests.h",
59 "seccomp-bpf/sandbox_bpf_test_runner.cc",
60 "seccomp-bpf/sandbox_bpf_test_runner.h",
62 deps += [ ":seccomp_bpf" ]
66 # Sources shared by sandbox_linux_unittests and sandbox_linux_jni_unittests.
67 source_set("sandbox_linux_unittests_sources") {
71 "services/proc_util_unittest.cc",
72 "services/resource_limits_unittests.cc",
73 "services/scoped_process_unittest.cc",
74 "services/syscall_wrappers_unittest.cc",
75 "services/thread_helpers_unittests.cc",
76 "services/yama_unittests.cc",
77 "syscall_broker/broker_file_permission_unittest.cc",
78 "syscall_broker/broker_process_unittest.cc",
80 "tests/scoped_temporary_file.cc",
81 "tests/scoped_temporary_file.h",
82 "tests/scoped_temporary_file_unittest.cc",
83 "tests/test_utils_unittest.cc",
84 "tests/unit_tests_unittest.cc",
89 ":sandbox_linux_test_utils",
91 "//base/test:test_support",
96 # Don't use this on Android.
100 if (compile_suid_client) {
102 "suid/client/setuid_sandbox_client_unittest.cc",
103 "suid/client/setuid_sandbox_host_unittest.cc",
106 if (use_seccomp_bpf) {
108 "bpf_dsl/bpf_dsl_unittest.cc",
109 "bpf_dsl/codegen_unittest.cc",
110 "bpf_dsl/cons_unittest.cc",
111 "bpf_dsl/syscall_set_unittest.cc",
112 "integration_tests/bpf_dsl_seccomp_unittest.cc",
113 "integration_tests/seccomp_broker_process_unittest.cc",
114 "seccomp-bpf-helpers/baseline_policy_unittest.cc",
115 "seccomp-bpf-helpers/syscall_parameters_restrictions_unittests.cc",
116 "seccomp-bpf/bpf_tests_unittest.cc",
117 "seccomp-bpf/errorcode_unittest.cc",
118 "seccomp-bpf/sandbox_bpf_unittest.cc",
119 "seccomp-bpf/syscall_unittest.cc",
122 if (compile_credentials) {
124 "integration_tests/namespace_unix_domain_socket_unittest.cc",
125 "services/credentials_unittest.cc",
126 "services/namespace_sandbox_unittest.cc",
127 "services/namespace_utils_unittest.cc",
130 # For credentials_unittest.cc
131 configs += [ "//build/config/linux:libcap" ]
135 # The main sandboxing test target.
136 test("sandbox_linux_unittests") {
138 ":sandbox_linux_unittests_sources",
142 # This target is the shared library used by Android APK (i.e.
143 # JNI-friendly) tests.
144 shared_library("sandbox_linux_jni_unittests") {
147 ":sandbox_linux_unittests_sources",
150 deps += [ "//testing/android:native_test_native_code" ]
154 component("seccomp_bpf") {
156 "bpf_dsl/bpf_dsl.cc",
158 "bpf_dsl/bpf_dsl_forward.h",
159 "bpf_dsl/bpf_dsl_impl.h",
160 "bpf_dsl/codegen.cc",
163 "bpf_dsl/dump_bpf.cc",
164 "bpf_dsl/dump_bpf.h",
165 "bpf_dsl/linux_syscall_ranges.h",
168 "bpf_dsl/policy_compiler.cc",
169 "bpf_dsl/policy_compiler.h",
170 "bpf_dsl/seccomp_macros.h",
171 "bpf_dsl/syscall_set.cc",
172 "bpf_dsl/syscall_set.h",
173 "bpf_dsl/trap_registry.h",
174 "bpf_dsl/verifier.cc",
175 "bpf_dsl/verifier.h",
176 "seccomp-bpf/die.cc",
178 "seccomp-bpf/errorcode.cc",
179 "seccomp-bpf/errorcode.h",
180 "seccomp-bpf/sandbox_bpf.cc",
181 "seccomp-bpf/sandbox_bpf.h",
182 "seccomp-bpf/syscall.cc",
183 "seccomp-bpf/syscall.h",
184 "seccomp-bpf/trap.cc",
185 "seccomp-bpf/trap.h",
187 defines = [ "SANDBOX_IMPLEMENTATION" ]
191 ":sandbox_services_headers",
196 component("seccomp_bpf_helpers") {
198 "seccomp-bpf-helpers/baseline_policy.cc",
199 "seccomp-bpf-helpers/baseline_policy.h",
200 "seccomp-bpf-helpers/sigsys_handlers.cc",
201 "seccomp-bpf-helpers/sigsys_handlers.h",
202 "seccomp-bpf-helpers/syscall_parameters_restrictions.cc",
203 "seccomp-bpf-helpers/syscall_parameters_restrictions.h",
204 "seccomp-bpf-helpers/syscall_sets.cc",
205 "seccomp-bpf-helpers/syscall_sets.h",
207 defines = [ "SANDBOX_IMPLEMENTATION" ]
217 # The setuid sandbox for Linux.
218 executable("chrome_sandbox") {
220 "suid/common/sandbox.h",
221 "suid/common/suid_unsafe_environment_variables.h",
222 "suid/process_util.h",
223 "suid/process_util_linux.c",
231 # These files have a suspicious comparison.
232 # TODO fix this and re-enable this warning.
238 component("sandbox_services") {
240 "services/init_process_reaper.cc",
241 "services/init_process_reaper.h",
242 "services/proc_util.cc",
243 "services/proc_util.h",
244 "services/resource_limits.cc",
245 "services/resource_limits.h",
246 "services/scoped_process.cc",
247 "services/scoped_process.h",
248 "services/syscall_wrappers.cc",
249 "services/syscall_wrappers.h",
250 "services/thread_helpers.cc",
251 "services/thread_helpers.h",
254 "syscall_broker/broker_channel.cc",
255 "syscall_broker/broker_channel.h",
256 "syscall_broker/broker_client.cc",
257 "syscall_broker/broker_client.h",
258 "syscall_broker/broker_common.h",
259 "syscall_broker/broker_file_permission.cc",
260 "syscall_broker/broker_file_permission.h",
261 "syscall_broker/broker_host.cc",
262 "syscall_broker/broker_host.h",
263 "syscall_broker/broker_policy.cc",
264 "syscall_broker/broker_policy.h",
265 "syscall_broker/broker_process.cc",
266 "syscall_broker/broker_process.h",
269 defines = [ "SANDBOX_IMPLEMENTATION" ]
275 if (compile_credentials) {
277 "services/credentials.cc",
278 "services/credentials.h",
279 "services/namespace_sandbox.cc",
280 "services/namespace_sandbox.h",
281 "services/namespace_utils.cc",
282 "services/namespace_utils.h",
285 deps += [ ":sandbox_services_headers" ]
289 source_set("sandbox_services_headers") {
291 "system_headers/android_arm64_ucontext.h",
292 "system_headers/android_arm_ucontext.h",
293 "system_headers/android_futex.h",
294 "system_headers/android_i386_ucontext.h",
295 "system_headers/android_ucontext.h",
296 "system_headers/arm64_linux_syscalls.h",
297 "system_headers/arm_linux_syscalls.h",
298 "system_headers/linux_seccomp.h",
299 "system_headers/linux_syscalls.h",
300 "system_headers/x86_32_linux_syscalls.h",
301 "system_headers/x86_64_linux_syscalls.h",
305 # We make this its own target so that it does not interfere with our tests.
306 source_set("libc_urandom_override") {
308 "services/libc_urandom_override.cc",
309 "services/libc_urandom_override.h",
316 if (compile_suid_client) {
317 component("suid_sandbox_client") {
319 "suid/client/setuid_sandbox_client.cc",
320 "suid/client/setuid_sandbox_client.h",
321 "suid/client/setuid_sandbox_host.cc",
322 "suid/client/setuid_sandbox_host.h",
323 "suid/common/sandbox.h",
324 "suid/common/suid_unsafe_environment_variables.h",
326 defines = [ "SANDBOX_IMPLEMENTATION" ]
336 # TODO(GYP) enable this. Needs an android_strip wrapper python script.
337 #action("sandbox_linux_unittests_stripped") {
338 # script = "android_stip.py"
340 # in_file = "$root_out_dir/sandbox_linux_unittests"
342 # out_file = "$root_out_dir/sandbox_linux_unittests_stripped"
343 # outputs = [ out_file ]
346 # rebase_path(in_file, root_build_dir),
347 # "-o", rebase_path(out_file, root_build_dir),
351 # ":sandbox_linux_unittests",
354 # TODO(GYP) convert this.
356 # 'target_name': 'sandbox_linux_jni_unittests_apk',
359 # 'test_suite_name': 'sandbox_linux_jni_unittests',
362 # 'sandbox_linux_jni_unittests',
364 # 'includes': [ '../../build/apk_test.gypi' ],