From c446c5e360ac89081485029ab7bc3b765312f156 Mon Sep 17 00:00:00 2001 From: Steve Fink Date: Tue, 29 Jul 2025 00:58:13 +0000 Subject: [PATCH] Bug 1977130 - Error-check pthread_getattr_np. r=glandium,spidermonkey-reviewers,jandem, a=RyanVM Differential Revision: https://phabricator.services.mozilla.com/D258648 --- js/src/util/NativeStack.cpp | 16 ++++++++-------- mozglue/misc/StackWalk.cpp | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/js/src/util/NativeStack.cpp b/js/src/util/NativeStack.cpp index 4e4189d39786..e77289c318a8 100644 --- a/js/src/util/NativeStack.cpp +++ b/js/src/util/NativeStack.cpp @@ -95,17 +95,16 @@ void* js::GetNativeStackBaseImpl() { pthread_t thread = pthread_self(); pthread_attr_t sattr; pthread_attr_init(&sattr); - pthread_getattr_np(thread, &sattr); + int rc = pthread_getattr_np(thread, &sattr); + MOZ_RELEASE_ASSERT(rc == 0, "pthread_getattr_np failed"); // stackBase will be the *lowest* address on all architectures. void* stackBase = nullptr; size_t stackSize = 0; - int rc = pthread_attr_getstack(&sattr, &stackBase, &stackSize); - if (rc) { - MOZ_CRASH( - "call to pthread_attr_getstack failed, unable to setup stack range for " - "JS"); - } + rc = pthread_attr_getstack(&sattr, &stackBase, &stackSize); + MOZ_RELEASE_ASSERT(rc == 0, + "call to pthread_attr_getstack failed, unable to setup " + "stack range for JS"); MOZ_RELEASE_ASSERT(stackBase, "invalid stack base, unable to setup stack range for JS"); pthread_attr_destroy(&sattr); @@ -148,7 +147,8 @@ void* js::GetNativeStackBaseImpl() { * FIXME: this function is non-portable; * other POSIX systems may have different np alternatives */ - pthread_getattr_np(thread, &sattr); + MOZ_RELEASE_ASSERT(pthread_getattr_np(thread, &sattr) == 0, + "pthread_getattr_np failed"); # endif void* stackBase = 0; diff --git a/mozglue/misc/StackWalk.cpp b/mozglue/misc/StackWalk.cpp index 7216a62fe9c6..cc62b4d78599 100644 --- a/mozglue/misc/StackWalk.cpp +++ b/mozglue/misc/StackWalk.cpp @@ -949,7 +949,8 @@ MFBT_API void MozStackWalk(MozWalkStackCallback aCallback, # elif defined(ANDROID) pthread_attr_t sattr; pthread_attr_init(&sattr); - pthread_getattr_np(pthread_self(), &sattr); + int rc = pthread_getattr_np(pthread_self(), &sattr); + MOZ_RELEASE_ASSERT(rc == 0, "pthread_getattr_np failed"); void* stackBase = stackEnd = nullptr; size_t stackSize = 0; if (gettid() != getpid()) {