summaryrefslogtreecommitdiff
path: root/firefox-glibc-dynstack.patch
diff options
context:
space:
mode:
Diffstat (limited to 'firefox-glibc-dynstack.patch')
-rw-r--r--firefox-glibc-dynstack.patch64
1 files changed, 64 insertions, 0 deletions
diff --git a/firefox-glibc-dynstack.patch b/firefox-glibc-dynstack.patch
new file mode 100644
index 0000000..b0487d7
--- /dev/null
+++ b/firefox-glibc-dynstack.patch
@@ -0,0 +1,64 @@
+diff -ur firefox-90.0.orig/js/xpconnect/src/XPCJSContext.cpp firefox-90.0/js/xpconnect/src/XPCJSContext.cpp
+--- firefox-90.0.orig/js/xpconnect/src/XPCJSContext.cpp 2021-07-05 21:16:02.000000000 +0200
++++ firefox-90.0/js/xpconnect/src/XPCJSContext.cpp 2021-07-19 15:01:24.083460460 +0200
+@@ -85,14 +85,6 @@
+ using namespace xpc;
+ using namespace JS;
+
+-// The watchdog thread loop is pretty trivial, and should not require much stack
+-// space to do its job. So only give it 32KiB or the platform minimum.
+-#if !defined(PTHREAD_STACK_MIN)
+-# define PTHREAD_STACK_MIN 0
+-#endif
+-static constexpr size_t kWatchdogStackSize =
+- PTHREAD_STACK_MIN < 32 * 1024 ? 32 * 1024 : PTHREAD_STACK_MIN;
+-
+ static void WatchdogMain(void* arg);
+ class Watchdog;
+ class WatchdogManager;
+@@ -163,7 +155,7 @@
+ // watchdog, we need to join it on shutdown.
+ mThread = PR_CreateThread(PR_USER_THREAD, WatchdogMain, this,
+ PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD,
+- PR_JOINABLE_THREAD, kWatchdogStackSize);
++ PR_JOINABLE_THREAD, 0);
+ if (!mThread) {
+ MOZ_CRASH("PR_CreateThread failed!");
+ }
+Only in firefox-90.0/js/xpconnect/src: XPCJSContext.cpp.firefox-glibc-dynstack
+diff -ur firefox-90.0.orig/security/sandbox/linux/launch/SandboxLaunch.cpp firefox-90.0/security/sandbox/linux/launch/SandboxLaunch.cpp
+--- firefox-90.0.orig/security/sandbox/linux/launch/SandboxLaunch.cpp 2021-07-05 18:20:36.000000000 +0200
++++ firefox-90.0/security/sandbox/linux/launch/SandboxLaunch.cpp 2021-07-20 08:39:17.272136982 +0200
+@@ -501,8 +501,7 @@
+ MOZ_NEVER_INLINE MOZ_ASAN_BLACKLIST static pid_t DoClone(int aFlags,
+ jmp_buf* aCtx) {
+ static constexpr size_t kStackAlignment = 16;
+- uint8_t miniStack[PTHREAD_STACK_MIN]
+- __attribute__((aligned(kStackAlignment)));
++ uint8_t miniStack[4096] __attribute__((aligned(kStackAlignment)));
+ #ifdef __hppa__
+ void* stackPtr = miniStack;
+ #else
+@@ -523,13 +522,19 @@
+ CLONE_CHILD_CLEARTID;
+ MOZ_RELEASE_ASSERT((aFlags & kBadFlags) == 0);
+
++ // Block signals due to small stack in DoClone.
++ sigset_t oldSigs;
++ BlockAllSignals(&oldSigs);
++
++ int ret = 0;
+ jmp_buf ctx;
+ if (setjmp(ctx) == 0) {
+ // In the parent and just called setjmp:
+- return DoClone(aFlags | SIGCHLD, &ctx);
++ ret = DoClone(aFlags | SIGCHLD, &ctx);
+ }
++ RestoreSignals(&oldSigs);
+ // In the child and have longjmp'ed:
+- return 0;
++ return ret;
+ }
+
+ static bool WriteStringToFile(const char* aPath, const char* aStr,
+Only in firefox-90.0/security/sandbox/linux/launch: SandboxLaunch.cpp~
bgstack15