| Index: content/common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc
|
| diff --git a/content/common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc b/content/common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc
|
| deleted file mode 100644
|
| index 09ccdeba1f32f60e036dd8f823711d387dd7f262..0000000000000000000000000000000000000000
|
| --- a/content/common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc
|
| +++ /dev/null
|
| @@ -1,226 +0,0 @@
|
| -// Copyright (c) 2013 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.
|
| -
|
| -#include "content/common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.h"
|
| -
|
| -#include <dlfcn.h>
|
| -#include <errno.h>
|
| -#include <fcntl.h>
|
| -#include <sys/socket.h>
|
| -#include <sys/stat.h>
|
| -#include <sys/types.h>
|
| -#include <unistd.h>
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/compiler_specific.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "content/common/sandbox_linux/sandbox_bpf_base_policy_linux.h"
|
| -#include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h"
|
| -#include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
|
| -#include "sandbox/linux/seccomp-bpf/sandbox_bpf.h"
|
| -#include "sandbox/linux/services/linux_syscalls.h"
|
| -
|
| -using sandbox::ErrorCode;
|
| -using sandbox::SandboxBPF;
|
| -using sandbox::SyscallSets;
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -inline bool IsChromeOS() {
|
| -#if defined(OS_CHROMEOS)
|
| - return true;
|
| -#else
|
| - return false;
|
| -#endif
|
| -}
|
| -
|
| -inline bool IsArchitectureArm() {
|
| -#if defined(__arm__)
|
| - return true;
|
| -#else
|
| - return false;
|
| -#endif
|
| -}
|
| -
|
| -void AddArmMaliGpuWhitelist(std::vector<std::string>* read_whitelist,
|
| - std::vector<std::string>* write_whitelist) {
|
| - // Device file needed by the ARM GPU userspace.
|
| - static const char kMali0Path[] = "/dev/mali0";
|
| -
|
| - // Devices needed for video decode acceleration on ARM.
|
| - static const char kDevMfcDecPath[] = "/dev/mfc-dec";
|
| - static const char kDevGsc1Path[] = "/dev/gsc1";
|
| -
|
| - // Devices needed for video encode acceleration on ARM.
|
| - static const char kDevMfcEncPath[] = "/dev/mfc-enc";
|
| -
|
| - read_whitelist->push_back(kMali0Path);
|
| - read_whitelist->push_back(kDevMfcDecPath);
|
| - read_whitelist->push_back(kDevGsc1Path);
|
| - read_whitelist->push_back(kDevMfcEncPath);
|
| -
|
| - write_whitelist->push_back(kMali0Path);
|
| - write_whitelist->push_back(kDevMfcDecPath);
|
| - write_whitelist->push_back(kDevGsc1Path);
|
| - write_whitelist->push_back(kDevMfcEncPath);
|
| -}
|
| -
|
| -void AddArmTegraGpuWhitelist(std::vector<std::string>* read_whitelist,
|
| - std::vector<std::string>* write_whitelist) {
|
| - // Device files needed by the Tegra GPU userspace.
|
| - static const char kDevNvhostCtrlPath[] = "/dev/nvhost-ctrl";
|
| - static const char kDevNvhostGr2dPath[] = "/dev/nvhost-gr2d";
|
| - static const char kDevNvhostGr3dPath[] = "/dev/nvhost-gr3d";
|
| - static const char kDevNvhostIspPath[] = "/dev/nvhost-isp";
|
| - static const char kDevNvhostViPath[] = "/dev/nvhost-vi";
|
| - static const char kDevNvmapPath[] = "/dev/nvmap";
|
| - static const char kDevTegraSemaPath[] = "/dev/tegra_sema";
|
| -
|
| - read_whitelist->push_back(kDevNvhostCtrlPath);
|
| - read_whitelist->push_back(kDevNvhostGr2dPath);
|
| - read_whitelist->push_back(kDevNvhostGr3dPath);
|
| - read_whitelist->push_back(kDevNvhostIspPath);
|
| - read_whitelist->push_back(kDevNvhostViPath);
|
| - read_whitelist->push_back(kDevNvmapPath);
|
| - read_whitelist->push_back(kDevTegraSemaPath);
|
| -
|
| - write_whitelist->push_back(kDevNvhostCtrlPath);
|
| - write_whitelist->push_back(kDevNvhostGr2dPath);
|
| - write_whitelist->push_back(kDevNvhostGr3dPath);
|
| - write_whitelist->push_back(kDevNvhostIspPath);
|
| - write_whitelist->push_back(kDevNvhostViPath);
|
| - write_whitelist->push_back(kDevNvmapPath);
|
| - write_whitelist->push_back(kDevTegraSemaPath);
|
| -}
|
| -
|
| -void AddArmGpuWhitelist(std::vector<std::string>* read_whitelist,
|
| - std::vector<std::string>* write_whitelist) {
|
| - // On ARM we're enabling the sandbox before the X connection is made,
|
| - // so we need to allow access to |.Xauthority|.
|
| - static const char kXAuthorityPath[] = "/home/chronos/.Xauthority";
|
| - static const char kLdSoCache[] = "/etc/ld.so.cache";
|
| -
|
| - // Files needed by the ARM GPU userspace.
|
| - static const char kLibGlesPath[] = "/usr/lib/libGLESv2.so.2";
|
| - static const char kLibEglPath[] = "/usr/lib/libEGL.so.1";
|
| -
|
| - read_whitelist->push_back(kXAuthorityPath);
|
| - read_whitelist->push_back(kLdSoCache);
|
| - read_whitelist->push_back(kLibGlesPath);
|
| - read_whitelist->push_back(kLibEglPath);
|
| -
|
| - AddArmMaliGpuWhitelist(read_whitelist, write_whitelist);
|
| - AddArmTegraGpuWhitelist(read_whitelist, write_whitelist);
|
| -}
|
| -
|
| -class CrosArmGpuBrokerProcessPolicy : public CrosArmGpuProcessPolicy {
|
| - public:
|
| - CrosArmGpuBrokerProcessPolicy() : CrosArmGpuProcessPolicy(false) {}
|
| - virtual ~CrosArmGpuBrokerProcessPolicy() {}
|
| -
|
| - virtual ErrorCode EvaluateSyscall(SandboxBPF* sandbox_compiler,
|
| - int system_call_number) const OVERRIDE;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(CrosArmGpuBrokerProcessPolicy);
|
| -};
|
| -
|
| -// A GPU broker policy is the same as a GPU policy with open and
|
| -// openat allowed.
|
| -ErrorCode CrosArmGpuBrokerProcessPolicy::EvaluateSyscall(SandboxBPF* sandbox,
|
| - int sysno) const {
|
| - switch (sysno) {
|
| - case __NR_access:
|
| - case __NR_open:
|
| - case __NR_openat:
|
| - return ErrorCode(ErrorCode::ERR_ALLOWED);
|
| - default:
|
| - return CrosArmGpuProcessPolicy::EvaluateSyscall(sandbox, sysno);
|
| - }
|
| -}
|
| -
|
| -bool EnableArmGpuBrokerPolicyCallback() {
|
| - return SandboxSeccompBPF::StartSandboxWithExternalPolicy(
|
| - scoped_ptr<sandbox::SandboxBPFPolicy>(new CrosArmGpuBrokerProcessPolicy));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -CrosArmGpuProcessPolicy::CrosArmGpuProcessPolicy(bool allow_shmat)
|
| - : allow_shmat_(allow_shmat) {}
|
| -
|
| -CrosArmGpuProcessPolicy::~CrosArmGpuProcessPolicy() {}
|
| -
|
| -ErrorCode CrosArmGpuProcessPolicy::EvaluateSyscall(SandboxBPF* sandbox,
|
| - int sysno) const {
|
| -#if defined(__arm__)
|
| - if (allow_shmat_ && sysno == __NR_shmat)
|
| - return ErrorCode(ErrorCode::ERR_ALLOWED);
|
| -#endif // defined(__arm__)
|
| -
|
| - switch (sysno) {
|
| -#if defined(__arm__)
|
| - // ARM GPU sandbox is started earlier so we need to allow networking
|
| - // in the sandbox.
|
| - case __NR_connect:
|
| - case __NR_getpeername:
|
| - case __NR_getsockname:
|
| - case __NR_sysinfo:
|
| - case __NR_uname:
|
| - return ErrorCode(ErrorCode::ERR_ALLOWED);
|
| - // Allow only AF_UNIX for |domain|.
|
| - case __NR_socket:
|
| - case __NR_socketpair:
|
| - return sandbox->Cond(0, ErrorCode::TP_32BIT,
|
| - ErrorCode::OP_EQUAL, AF_UNIX,
|
| - ErrorCode(ErrorCode::ERR_ALLOWED),
|
| - ErrorCode(EPERM));
|
| -#endif // defined(__arm__)
|
| - default:
|
| - if (SyscallSets::IsAdvancedScheduler(sysno))
|
| - return ErrorCode(ErrorCode::ERR_ALLOWED);
|
| -
|
| - // Default to the generic GPU policy.
|
| - return GpuProcessPolicy::EvaluateSyscall(sandbox, sysno);
|
| - }
|
| -}
|
| -
|
| -bool CrosArmGpuProcessPolicy::PreSandboxHook() {
|
| - DCHECK(IsChromeOS() && IsArchitectureArm());
|
| - // Create a new broker process.
|
| - DCHECK(!broker_process());
|
| -
|
| - std::vector<std::string> read_whitelist_extra;
|
| - std::vector<std::string> write_whitelist_extra;
|
| - // Add ARM-specific files to whitelist in the broker.
|
| -
|
| - AddArmGpuWhitelist(&read_whitelist_extra, &write_whitelist_extra);
|
| - InitGpuBrokerProcess(EnableArmGpuBrokerPolicyCallback,
|
| - read_whitelist_extra,
|
| - write_whitelist_extra);
|
| -
|
| - const int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE;
|
| -
|
| - // Preload the Mali library.
|
| - dlopen("/usr/lib/libmali.so", dlopen_flag);
|
| -
|
| - // Preload the Tegra libraries.
|
| - dlopen("/usr/lib/libnvrm.so", dlopen_flag);
|
| - dlopen("/usr/lib/libnvrm_graphics.so", dlopen_flag);
|
| - dlopen("/usr/lib/libnvos.so", dlopen_flag);
|
| - dlopen("/usr/lib/libnvddk_2d.so", dlopen_flag);
|
| - dlopen("/usr/lib/libardrv_dynamic.so", dlopen_flag);
|
| - dlopen("/usr/lib/libnvwsi.so", dlopen_flag);
|
| - dlopen("/usr/lib/libnvglsi.so", dlopen_flag);
|
| - dlopen("/usr/lib/libcgdrv.so", dlopen_flag);
|
| -
|
| - return true;
|
| -}
|
| -
|
| -} // namespace content
|
|
|