fune/dom/media/ipc/RDDProcessImpl.cpp
Landry Breuil 803225ac22 Bug 1856301: [OpenBSD] also preload libavcodec.so before sandboxing r=gerard-majax
With the current sandboxing configuration, FFmpegRuntimeLinker::Init()
can't access libavcodec.so, so video decoding fails in the RDD process
and fallbacks to the content process.

With media.allow-audio-non-utility knob (from bug #1850904) toggled
to false enforcing audio decoding in the Utility process, this has the
side effect of enforcing video decoding in the RDD process, and thus
video decoding fails.

Preloading libavcodec.so like it was done for libmozavcodec.so and
libmozavutil.so in bug #1713745 fixes it, as the second dlopen() call
hits the ld.so cache and returns the preloaded library handle.

replaces/supersedes https://phabricator.services.mozilla.com/D190475

Differential Revision: https://phabricator.services.mozilla.com/D193353
2023-11-14 05:56:32 +00:00

52 lines
1.6 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "RDDProcessImpl.h"
#include "mozilla/ipc/IOThreadChild.h"
#include "mozilla/GeckoArgs.h"
#if defined(XP_WIN) && defined(MOZ_SANDBOX)
# include "mozilla/sandboxTarget.h"
#elif defined(__OpenBSD__) && defined(MOZ_SANDBOX)
# include "mozilla/SandboxSettings.h"
# include "prlink.h"
#endif
namespace mozilla {
using namespace ipc;
RDDProcessImpl::~RDDProcessImpl() = default;
bool RDDProcessImpl::Init(int aArgc, char* aArgv[]) {
#if defined(MOZ_SANDBOX) && defined(XP_WIN)
// Preload AV dlls so we can enable Binary Signature Policy
// to restrict further dll loads.
LoadLibraryW(L"mozavcodec.dll");
LoadLibraryW(L"mozavutil.dll");
mozilla::SandboxTarget::Instance()->StartSandbox();
#elif defined(__OpenBSD__) && defined(MOZ_SANDBOX)
PR_LoadLibrary("libmozavcodec.so");
PR_LoadLibrary("libmozavutil.so");
PR_LoadLibrary("libavcodec.so");
StartOpenBSDSandbox(GeckoProcessType_RDD);
#endif
Maybe<const char*> parentBuildID =
geckoargs::sParentBuildID.Get(aArgc, aArgv);
if (parentBuildID.isNothing()) {
return false;
}
if (!ProcessChild::InitPrefs(aArgc, aArgv)) {
return false;
}
return mRDD->Init(TakeInitialEndpoint(), *parentBuildID);
}
void RDDProcessImpl::CleanUp() { NS_ShutdownXPCOM(nullptr); }
} // namespace mozilla