From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 7 Mar 2022 16:36:28 -0800 Subject: feat: add kNoStartDebugSignalHandler to Environment to prevent SIGUSR1 handling This patch should be upstreamed, it allows embedders to prevent the call to StartDebugSignalHandler which handles SIGUSR1 and starts the inspector agent. Apps that have --inspect disabled also don't want SIGUSR1 to have this affect. diff --git a/src/env-inl.h b/src/env-inl.h index 7ceab0da0c632f857f6e2d0fbf479bbc4f55df07..debd982c75805c51ea7d01229b9d635550060503 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -627,6 +627,10 @@ inline bool Environment::no_global_search_paths() const { !options_->global_search_paths; } +inline bool Environment::should_start_debug_signal_handler() const { + return (flags_ & EnvironmentFlags::kNoStartDebugSignalHandler) == 0; +} + inline bool Environment::no_browser_globals() const { // configure --no-browser-globals #ifdef NODE_NO_BROWSER_GLOBALS diff --git a/src/env.h b/src/env.h index b0f10cfca00f380728903d5e0ea24cf3156ead0f..c914b621f50bcd6bce2617fef9e48737235aa516 100644 --- a/src/env.h +++ b/src/env.h @@ -748,6 +748,7 @@ class Environment : public MemoryRetainer { inline bool tracks_unmanaged_fds() const; inline bool hide_console_windows() const; inline bool no_global_search_paths() const; + inline bool should_start_debug_signal_handler() const; inline bool no_browser_globals() const; inline uint64_t thread_id() const; inline worker::Worker* worker_context() const; diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc index b1ba86b7b0b2349f771e01143630e45cf0aecc3b..4c9f7f636aeeb19a87150ac5a05e28159503f051 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -703,8 +703,10 @@ bool Agent::Start(const std::string& path, StartIoThreadAsyncCallback)); uv_unref(reinterpret_cast(&start_io_thread_async)); start_io_thread_async.data = this; - // Ignore failure, SIGUSR1 won't work, but that should not block node start. - StartDebugSignalHandler(); + if (parent_env_->should_start_debug_signal_handler()) { + // Ignore failure, SIGUSR1 won't work, but that should not block node start. + StartDebugSignalHandler(); + } parent_env_->AddCleanupHook([](void* data) { Environment* env = static_cast(data); diff --git a/src/node.h b/src/node.h index b50bd5a941d381778d464fdb2770566a3ac34fed..c4cce244359d893acf31e78f935152d4d47b14cd 100644 --- a/src/node.h +++ b/src/node.h @@ -575,7 +575,11 @@ enum Flags : uint64_t { // This control is needed by embedders who may not want to initialize the V8 // inspector in situations where one has already been created, // e.g. Blink's in Chromium. - kNoCreateInspector = 1 << 9 + kNoCreateInspector = 1 << 9, + // Controls where or not the InspectorAgent for this Environment should + // call StartDebugSignalHandler. This control is needed by embedders who may + // not want to allow other processes to start the V8 inspector. + kNoStartDebugSignalHandler = 1 << 10 }; } // namespace EnvironmentFlags