Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/. */
#ifdef MOZ_USING_WASM_SANDBOXING
// For MOZ_CRASH_UNSAFE_PRINTF
# include "mozilla/Assertions.h"
# include "mozilla/mozalloc_oom.h"
// Load general firefox configuration of RLBox
# include "mozilla/rlbox/rlbox_config.h"
# include "mozilla/rlbox/rlbox_wasm2c_tls.hpp"
# include "wasm-rt.h"
# ifndef WASM_RT_GROW_FAILED_CRASH
# include "nsExceptionHandler.h"
# endif
// The MingW compiler does not correctly handle static thread_local inline
// members. We instead TLS storage via functions. This can be removed if the
// MingW bug is fixed.
RLBOX_WASM2C_SANDBOX_STATIC_VARIABLES();
extern "C" {
// Any error encountered by the wasm2c runtime or wasm sandboxed library code
// is configured to call the below trap handler.
void moz_wasm2c_trap_handler(wasm_rt_trap_t code) {
MOZ_CRASH_UNSAFE_PRINTF("wasm2c crash: %s", wasm_rt_strerror(code));
}
// The below function is called if a malloc in sandboxed code returns null
// This indicates that the sandbox has run out of memory.
void moz_wasm2c_memgrow_failed() {
# ifdef WASM_RT_GROW_FAILED_CRASH
MOZ_CRASH("wasm2c memory grow failed");
# else
CrashReporter::RecordAnnotationBool(
CrashReporter::Annotation::WasmLibrarySandboxMallocFailed, true);
# endif
}
// This function is called when mozalloc_handle_oom is called from within
// the sandbox. We redirect to that function, ignoring the ctx argument, which
// is the sandbox itself.
void w2c_env_mozalloc_handle_oom(void* ctx, uint32_t size) {
mozalloc_handle_oom(size);
}
}
#endif