Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7a80312

Browse filesBrowse files
dvyukovRafaelGSS
authored andcommitted
src: don't reset embeder signal handlers
The only bad handler value we can inhert from before exec is SIG_IGN (any actual function pointer is reset to SIG_DFL during exec). If that's the case, we want to reset it back to SIG_DFL. However, it's also possible that an embeder (or an LD_PRELOAD-ed library) has set up own signal handler for own purposes (e.g. profiling). If that's the case, keep it intact. Fix #47013 PR-URL: #47188 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 54261f3 commit 7a80312
Copy full SHA for 7a80312

File tree

Expand file treeCollapse file tree

1 file changed

+11
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+11
-0
lines changed
Open diff view settings
Collapse file

‎src/node.cc‎

Copy file name to clipboardExpand all lines: src/node.cc
+11Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,17 @@ void ResetSignalHandlers() {
447447
if (nr == SIGKILL || nr == SIGSTOP)
448448
continue;
449449
act.sa_handler = (nr == SIGPIPE || nr == SIGXFSZ) ? SIG_IGN : SIG_DFL;
450+
if (act.sa_handler == SIG_DFL) {
451+
// The only bad handler value we can inhert from before exec is SIG_IGN
452+
// (any actual function pointer is reset to SIG_DFL during exec).
453+
// If that's the case, we want to reset it back to SIG_DFL.
454+
// However, it's also possible that an embeder (or an LD_PRELOAD-ed
455+
// library) has set up own signal handler for own purposes
456+
// (e.g. profiling). If that's the case, we want to keep it intact.
457+
struct sigaction old;
458+
CHECK_EQ(0, sigaction(nr, nullptr, &old));
459+
if ((old.sa_flags & SA_SIGINFO) || old.sa_handler != SIG_IGN) continue;
460+
}
450461
CHECK_EQ(0, sigaction(nr, &act, nullptr));
451462
}
452463
#endif // __POSIX__

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.