Files
tubestation/security/sandbox/linux/SandboxProfilerChild.h
Alexandre Lissy f87936fcfa Bug 1884378 - Introduce SandboxProfiler r=padenot
Provide a way to forward sandbox decisions and syscalls interceptions to
the profiler, with child-side stack in the reports.

Introduces a new SandboxProfilerEmitter thread that will be able to deal
with what cannot be done in the context of a signal handler.

Child-side syscalls interceptions with stacks requires a bit of care
because of the signal context it is running under. Taking a stack is
safe in that context but dealing with the profiler is not, thus relying
on the MPSCQueue data structure:
 - when in SIGSYS because a syscall has been intercepted, take a stack
 - forward the syscall informations plus the stack within the MPSCQueue
 - SandoxProfilerEmitter can then read from the queue and perform the
   heavy work with the profiler

Differential Revision: https://phabricator.services.mozilla.com/D207736
2024-06-14 10:17:36 +00:00

48 lines
1.2 KiB
C++

/* 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 https://mozilla.org/MPL/2.0/. */
#ifndef SANDBOX_PROFILER_CHILD_H
#define SANDBOX_PROFILER_CHILD_H
#include "SandboxProfiler.h"
#if defined(HAVE_REPORT_UPROFILER_PARENT)
#error Cannot include SandboxProfilerChild.h when already included SandboxProfilerParent.h
#endif
#define HAVE_REPORT_UPROFILER_CHILD
namespace mozilla {
/* static */
bool SandboxProfiler::Init() {
MOZ_ASSERT(!sInSignalContext,
"SandboxProfiler::Init called in SIGSYS handler");
if (!uprofiler_initted) {
UPROFILER_GET(g);
if (g && !g(&uprofiler)) {
return false;
}
}
MOZ_ASSERT(uprofiler.simple_event_marker_with_stack !=
simple_event_marker_with_stack_noop,
"Marker sym OK");
MOZ_ASSERT(uprofiler.native_backtrace != native_backtrace_noop,
"Backtrace sym OK");
if (uprofiler.native_backtrace &&
uprofiler.native_backtrace != native_backtrace_noop) {
uprofiler_initted = true;
return true;
}
return false;
}
} // namespace mozilla
#endif // SANDBOX_PROFILER_CHILD_H