// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "media/gpu/sandbox/hardware_video_decoding_sandbox_hook_linux.h" #include <dlfcn.h> #include <sys/stat.h> #include "base/process/process_metrics.h" #include "base/strings/stringprintf.h" #include "media/gpu/buildflags.h" #include "sandbox/policy/linux/bpf_hardware_video_decoding_policy_linux.h" #if BUILDFLAG(USE_VAAPI) #include "media/gpu/vaapi/vaapi_wrapper.h" #endif BrokerFilePermission; // TODO(b/195769334): the hardware video decoding sandbox is really only useful // when building with VA-API or V4L2 (otherwise, we're not really doing hardware // video decoding). Consider restricting the kHardwareVideoDecoding sandbox type // to exist only in those configurations so that the presandbox hook is only // compiled in those scenarios. As it is now, kHardwareVideoDecoding exists for // all ash-chrome builds because // chrome/browser/ash/arc/video/gpu_arc_video_service_host.cc depends on it and // that file is built for ash-chrome regardless of VA-API/V4L2. That means that // bots like linux-chromeos-rel end up compiling this presandbox hook (thus the // NOTREACHED_IN_MIGRATION()s in some places here). namespace media { namespace { void AllowAccessToRenderNodes(std::vector<BrokerFilePermission>& permissions, bool include_sys_dev_char, bool read_write) { … } bool HardwareVideoDecodingPreSandboxHookForVaapiOnIntel( sandbox::syscall_broker::BrokerCommandSet& command_set, std::vector<BrokerFilePermission>& permissions) { … } bool HardwareVideoDecodingPreSandboxHookForVaapiOnAMD( sandbox::syscall_broker::BrokerCommandSet& command_set, std::vector<BrokerFilePermission>& permissions) { … } bool HardwareVideoDecodingPreSandboxHookForV4L2( sandbox::syscall_broker::BrokerCommandSet& command_set, std::vector<BrokerFilePermission>& permissions) { … } } // namespace // TODO(b/195769334): consider using the type of client to decide if we should // allow opening the render node after entering the sandbox: // // - If the client is ARC++/ARCVM, the render node only needs to be opened after // entering the sandbox for two cases: the legacy VaapiVideoDecodeAccelerator // and AMD. // // - If the client is a Chrome renderer process, the render node needs to be // opened after entering the sandbox on ChromeOS to allocate output buffers // (at least). bool HardwareVideoDecodingPreSandboxHook( sandbox::policy::SandboxLinux::Options options) { … } } // namespace media