| Index: sandbox/linux/BUILD.gn
|
| diff --git a/sandbox/linux/BUILD.gn b/sandbox/linux/BUILD.gn
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d7efa73f9e5f562c232d6f5a4ccfe4650864c6aa
|
| --- /dev/null
|
| +++ b/sandbox/linux/BUILD.gn
|
| @@ -0,0 +1,313 @@
|
| +# Copyright 2014 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import("//build/config/features.gni")
|
| +
|
| +declare_args() {
|
| + compile_suid_client = is_linux
|
| +
|
| + compile_credentials = is_linux
|
| +
|
| + compile_seccomp_bpf_demo =
|
| + (is_linux && (cpu_arch == "x86" || cpu_arch == "x64"))
|
| +}
|
| +
|
| +# We have two principal targets: sandbox and sandbox_linux_unittests
|
| +# All other targets are listed as dependencies.
|
| +# There is one notable exception: for historical reasons, chrome_sandbox is
|
| +# the setuid sandbox and is its own target.
|
| +
|
| +group("sandbox") {
|
| + deps = [
|
| + ":sandbox_services",
|
| + ]
|
| +
|
| + if (compile_suid_client) {
|
| + deps += [ ":suid_sandbox_client" ]
|
| + }
|
| + if (use_seccomp_bpf) {
|
| + deps += [
|
| + ":seccomp_bpf",
|
| + ":seccomp_bpf_helpers",
|
| + ]
|
| + }
|
| +}
|
| +
|
| +source_set("sandbox_linux_test_utils") {
|
| + sources = [
|
| + "tests/sandbox_test_runner.cc",
|
| + "tests/sandbox_test_runner.h",
|
| + "tests/sandbox_test_runner_function_pointer.cc",
|
| + "tests/sandbox_test_runner_function_pointer.h",
|
| + "tests/test_utils.cc",
|
| + "tests/test_utils.h",
|
| + "tests/unit_tests.cc",
|
| + "tests/unit_tests.h",
|
| + ]
|
| +
|
| + deps = [
|
| + "//testing/gtest",
|
| + ]
|
| +
|
| + if (use_seccomp_bpf) {
|
| + sources += [
|
| + "seccomp-bpf/bpf_tester_compatibility_delegate.h",
|
| + "seccomp-bpf/bpf_tests.h",
|
| + "seccomp-bpf/sandbox_bpf_test_runner.cc",
|
| + "seccomp-bpf/sandbox_bpf_test_runner.h",
|
| + ]
|
| + deps += [
|
| + ":seccomp_bpf",
|
| + ]
|
| + }
|
| +}
|
| +
|
| +# The main sandboxing test target.
|
| +test("sandbox_linux_unittests") {
|
| + sources = [
|
| + "tests/main.cc",
|
| + "tests/unit_tests_unittest.cc",
|
| + "services/broker_process_unittest.cc",
|
| + "services/scoped_process_unittest.cc",
|
| + "services/thread_helpers_unittests.cc",
|
| + "services/yama_unittests.cc",
|
| + ]
|
| +
|
| + deps = [
|
| + ":sandbox",
|
| + ":sandbox_linux_test_utils",
|
| + "//base",
|
| + "//base/test:test_support",
|
| + "//testing/gtest",
|
| + ]
|
| +
|
| + if (compile_suid_client) {
|
| + sources += [
|
| + "suid/client/setuid_sandbox_client_unittest.cc",
|
| + ]
|
| + }
|
| + if (use_seccomp_bpf) {
|
| + sources += [
|
| + "seccomp-bpf-helpers/baseline_policy_unittest.cc",
|
| + "seccomp-bpf/bpf_tests_unittest.cc",
|
| + "seccomp-bpf/codegen_unittest.cc",
|
| + "seccomp-bpf/errorcode_unittest.cc",
|
| + "seccomp-bpf/sandbox_bpf_unittest.cc",
|
| + "seccomp-bpf/syscall_iterator_unittest.cc",
|
| + "seccomp-bpf/syscall_unittest.cc",
|
| + ]
|
| + }
|
| + if (compile_credentials) {
|
| + sources += [
|
| + "services/credentials_unittest.cc",
|
| + "services/unix_domain_socket_unittest.cc",
|
| + ]
|
| + }
|
| +}
|
| +
|
| +# TODO(GYP) Android version of this test.
|
| +# {
|
| +# # This target is the shared library used by Android APK (i.e.
|
| +# # JNI-friendly) tests.
|
| +# "target_name": "sandbox_linux_jni_unittests",
|
| +# "includes": [
|
| +# "sandbox_linux_test_sources.gypi",
|
| +# ],
|
| +# "type": "shared_library",
|
| +# "conditions": [
|
| +# [ "OS == "android"", {
|
| +# "dependencies": [
|
| +# "../testing/android/native_test.gyp:native_test_native_code",
|
| +# ],
|
| +# }],
|
| +# ],
|
| +# },
|
| +
|
| +component("seccomp_bpf") {
|
| + sources = [
|
| + "seccomp-bpf/basicblock.cc",
|
| + "seccomp-bpf/basicblock.h",
|
| + "seccomp-bpf/codegen.cc",
|
| + "seccomp-bpf/codegen.h",
|
| + "seccomp-bpf/die.cc",
|
| + "seccomp-bpf/die.h",
|
| + "seccomp-bpf/errorcode.cc",
|
| + "seccomp-bpf/errorcode.h",
|
| + "seccomp-bpf/instruction.h",
|
| + "seccomp-bpf/linux_seccomp.h",
|
| + "seccomp-bpf/sandbox_bpf.cc",
|
| + "seccomp-bpf/sandbox_bpf.h",
|
| + "seccomp-bpf/sandbox_bpf_compatibility_policy.h",
|
| + "seccomp-bpf/sandbox_bpf_policy.cc",
|
| + "seccomp-bpf/sandbox_bpf_policy.h",
|
| + "seccomp-bpf/syscall.cc",
|
| + "seccomp-bpf/syscall.h",
|
| + "seccomp-bpf/syscall_iterator.cc",
|
| + "seccomp-bpf/syscall_iterator.h",
|
| + "seccomp-bpf/trap.cc",
|
| + "seccomp-bpf/trap.h",
|
| + "seccomp-bpf/verifier.cc",
|
| + "seccomp-bpf/verifier.h",
|
| + ]
|
| + defines = [ "SANDBOX_IMPLEMENTATION" ]
|
| +
|
| + deps = [
|
| + ":sandbox_services_headers",
|
| + "//base",
|
| + ]
|
| +}
|
| +
|
| +component("seccomp_bpf_helpers") {
|
| + sources = [
|
| + "seccomp-bpf-helpers/baseline_policy.cc",
|
| + "seccomp-bpf-helpers/baseline_policy.h",
|
| + "seccomp-bpf-helpers/sigsys_handlers.cc",
|
| + "seccomp-bpf-helpers/sigsys_handlers.h",
|
| + "seccomp-bpf-helpers/syscall_parameters_restrictions.cc",
|
| + "seccomp-bpf-helpers/syscall_parameters_restrictions.h",
|
| + "seccomp-bpf-helpers/syscall_sets.cc",
|
| + "seccomp-bpf-helpers/syscall_sets.h",
|
| + ]
|
| + defines = [ "SANDBOX_IMPLEMENTATION" ]
|
| +
|
| + deps = [
|
| + "//base",
|
| + ":seccomp_bpf",
|
| + ]
|
| +}
|
| +
|
| +if (compile_seccomp_bpf_demo) {
|
| + # A demonstration program for the seccomp-bpf sandbox.
|
| + executable("seccomp_bpf_demo") {
|
| + sources = [
|
| + "seccomp-bpf/demo.cc",
|
| + ]
|
| + deps = [
|
| + ":seccomp_bpf",
|
| + ]
|
| + }
|
| +}
|
| +
|
| +# The setuid sandbox for Linux.
|
| +executable("chrome_sandbox") {
|
| + sources = [
|
| + "suid/common/sandbox.h",
|
| + "suid/common/suid_unsafe_environment_variables.h",
|
| + "suid/linux_util.c",
|
| + "suid/linux_util.h",
|
| + "suid/process_util.h",
|
| + "suid/process_util_linux.c",
|
| + "suid/sandbox.c",
|
| + ]
|
| +
|
| + cflags = [
|
| + # For ULLONG_MAX
|
| + "-std=gnu99",
|
| + # These files have a suspicious comparison.
|
| + # TODO fix this and re-enable this warning.
|
| + "-Wno-sign-compare",
|
| + ]
|
| +}
|
| +
|
| +component("sandbox_services") {
|
| + sources = [
|
| + "services/broker_process.cc",
|
| + "services/broker_process.h",
|
| + "services/init_process_reaper.cc",
|
| + "services/init_process_reaper.h",
|
| + "services/scoped_process.cc",
|
| + "services/scoped_process.h",
|
| + "services/thread_helpers.cc",
|
| + "services/thread_helpers.h",
|
| + "services/yama.h",
|
| + "services/yama.cc",
|
| + ]
|
| +
|
| + defines = [ "SANDBOX_IMPLEMENTATION" ]
|
| +
|
| + if (compile_credentials) {
|
| + sources += [
|
| + "services/credentials.cc",
|
| + "services/credentials.h",
|
| + ]
|
| + # For capabilities.cc.
|
| + configs += [ "//build/config/linux:libcap" ]
|
| + }
|
| +
|
| + deps = [
|
| + "//base",
|
| + ]
|
| +}
|
| +
|
| +source_set("sandbox_services_headers") {
|
| + sources = [
|
| + "services/android_arm_ucontext.h",
|
| + "services/android_ucontext.h",
|
| + "services/android_i386_ucontext.h",
|
| + "services/arm_linux_syscalls.h",
|
| + "services/linux_syscalls.h",
|
| + "services/x86_32_linux_syscalls.h",
|
| + "services/x86_64_linux_syscalls.h",
|
| + ]
|
| +}
|
| +
|
| +# We make this its own target so that it does not interfere with our tests.
|
| +source_set("libc_urandom_override") {
|
| + sources = [
|
| + "services/libc_urandom_override.cc",
|
| + "services/libc_urandom_override.h",
|
| + ]
|
| + deps = [
|
| + "//base",
|
| + ]
|
| +}
|
| +
|
| +component("suid_sandbox_client") {
|
| + sources = [
|
| + "suid/common/sandbox.h",
|
| + "suid/common/suid_unsafe_environment_variables.h",
|
| + "suid/client/setuid_sandbox_client.cc",
|
| + "suid/client/setuid_sandbox_client.h",
|
| + ]
|
| + defines = [ "SANDBOX_IMPLEMENTATION" ]
|
| +
|
| + deps = [
|
| + ":sandbox_services",
|
| + "//base",
|
| + ]
|
| +}
|
| +
|
| +if (is_android) {
|
| + # TODO(GYP) enable this. Needs an android_strip wrapper python script.
|
| + #action("sandbox_linux_unittests_stripped") {
|
| + # script = "android_stip.py"
|
| + #
|
| + # in_file = "$root_out_dir/sandbox_linux_unittests"
|
| + #
|
| + # out_file = "$root_out_dir/sandbox_linux_unittests_stripped"
|
| + # outputs = [ out_file ]
|
| + #
|
| + # args = [
|
| + # rebase_path(in_file, root_build_dir),
|
| + # "-o", rebase_path(out_file, root_build_dir),
|
| + # ]
|
| + #
|
| + # deps = [
|
| + # ":sandbox_linux_unittests",
|
| + # ]
|
| + #}
|
| +
|
| + # TODO(GYP) convert this.
|
| + # {
|
| + # 'target_name': 'sandbox_linux_jni_unittests_apk',
|
| + # 'type': 'none',
|
| + # 'variables': {
|
| + # 'test_suite_name': 'sandbox_linux_jni_unittests',
|
| + # },
|
| + # 'dependencies': [
|
| + # 'sandbox_linux_jni_unittests',
|
| + # ],
|
| + # 'includes': [ '../../build/apk_test.gypi' ],
|
| + # }
|
| +}
|
|
|