From b2b248161e220add61acbf9ff566497313a8f4cb Mon Sep 17 00:00:00 2001 From: slipher Date: Mon, 17 Aug 2026 00:27:56 -0500 Subject: [PATCH 1/3] Fix a missing error check in nacl_tls_unittest --- src/trusted/service_runtime/nacl_tls_unittest.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/trusted/service_runtime/nacl_tls_unittest.c b/src/trusted/service_runtime/nacl_tls_unittest.c index b5deb5c635..cec5b2843c 100644 --- a/src/trusted/service_runtime/nacl_tls_unittest.c +++ b/src/trusted/service_runtime/nacl_tls_unittest.c @@ -115,13 +115,15 @@ static thread_return_t OS_API_TYPE ThreadEntryPoint(thread_param_t p) { ++g_running_thread_count; /* Wait for all threads to be running. */ - WaitForThreads(param->total_num_threads); - - /* - * All of the threads have started and have written to their own TLS. - * Read our TLS and give it back to the main thread. - */ - param->p_tls_data_return[my_thread_num] = tls_data; + if (WaitForThreads(param->total_num_threads)) { + /* + * All of the threads have started and have written to their own TLS. + * Read our TLS and give it back to the main thread. + */ + param->p_tls_data_return[my_thread_num] = tls_data; + } else { + NaClLog(LOG_ERROR, "WaitForThreads timed out\n"); + } return 0; } From 5ffc5aefdd26e9deb700662f041cad24759f5372 Mon Sep 17 00:00:00 2001 From: slipher Date: Mon, 24 Aug 2026 21:59:08 -0500 Subject: [PATCH 2/3] Improve thread_exit syscall thread safety Write the "stack flag" atomically and use a memory barrier. --- .../service_runtime/nacl_syscall_common.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/trusted/service_runtime/nacl_syscall_common.c b/src/trusted/service_runtime/nacl_syscall_common.c index 926c9352c5..227dab02bf 100644 --- a/src/trusted/service_runtime/nacl_syscall_common.c +++ b/src/trusted/service_runtime/nacl_syscall_common.c @@ -21,6 +21,7 @@ #include "native_client/src/trusted/service_runtime/nacl_syscall_common.h" +#include "native_client/src/include/concurrency_ops.h" #include "native_client/src/include/nacl_macros.h" #include "native_client/src/include/portability_process.h" #include "native_client/src/include/portability_string.h" @@ -159,8 +160,6 @@ int32_t NaClSysExit(struct NaClAppThread *natp, int32_t NaClSysThreadExit(struct NaClAppThread *natp, uint32_t stack_flag_addr) { - uint32_t zero = 0; - NaClLog(4, "NaClSysThreadExit(0x%08"NACL_PRIxPTR", " "0x%08"NACL_PRIx32"\n", (uintptr_t) natp, stack_flag_addr); @@ -170,10 +169,18 @@ int32_t NaClSysThreadExit(struct NaClAppThread *natp, */ if (0 != stack_flag_addr) { - if (!NaClCopyOutToUser(natp->nap, (uintptr_t) stack_flag_addr, - &zero, sizeof zero)) { - NaClLog(4, "NaClSysThreadExit: ignoring invalid stack_flag_addr\n"); + uintptr_t sys_addr = NaClUserToSysAddrRange(natp->nap, + (uintptr_t) stack_flag_addr, + 4); + if (sys_addr == kNaClBadAddress || sys_addr % 4 != 0) { + NaClLog(LOG_ERROR, "NaClSysThreadExit: invalid stack_flag_addr\n"); + return -NACL_ABI_EINVAL; } + NaClWriteMemoryBarrier(); + /* Not using CopyOutToUser since this should be atomic */ + NaClCopyTakeLock(natp->nap); + *(uint32_t *) sys_addr = 0; + NaClCopyDropLock(natp->nap); } NaClAppThreadTeardown(natp); From c40aba4782fa27beda0f104f96cfb49ae28789db Mon Sep 17 00:00:00 2001 From: slipher Date: Mon, 12 Oct 2026 23:52:04 -0500 Subject: [PATCH 3/3] Don't run toolchain_build/ test This test was for some scripts to build toolchains, which have been replaced by saigo-nacl-sdk. The test is annoying because it fails if run on Windows from a drive other than C: and also uses 'deps' files that illwieckz wants to delete. --- .github/workflows/build_test.yml | 4 ++-- SConstruct | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 22f94477a1..2c02544770 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -61,7 +61,7 @@ jobs: vm_image: windows-2022 sdk_platform: windows-amd64 scons_build_args: platform=x86-64 --no-clang werror=1 mingw_dir=mingw/mingw - scons_tests: small_tests medium_tests large_tests disable_tests=run_toolchain_python_tests + scons_tests: small_tests medium_tests large_tests vpython: pyenv/Scripts/python python_packages: pywin32 mingw_url: https://github.com/niXman/mingw-builds-binaries/releases/download/16.1.0-rt_v14-rev1/x86_64-16.1.0-release-posix-seh-msvcrt-rt_v14-rev1.7z @@ -79,7 +79,7 @@ jobs: vm_image: windows-2022 sdk_platform: windows-amd64 scons_build_args: platform=x86-64 --no-clang mingw=1 werror=1 mingw_dir=mingw/mingw - scons_tests: small_tests medium_tests large_tests disable_tests=run_toolchain_python_tests + scons_tests: small_tests medium_tests large_tests vpython: pyenv/Scripts/python python_packages: pywin32 mingw_url: https://github.com/niXman/mingw-builds-binaries/releases/download/16.1.0-rt_v14-rev1/x86_64-16.1.0-release-posix-seh-msvcrt-rt_v14-rev1.7z diff --git a/SConstruct b/SConstruct index 69aaa7939e..302b25b227 100755 --- a/SConstruct +++ b/SConstruct @@ -2131,7 +2131,7 @@ def MakeBaseTrustedEnv(platform=None): 'tests/unittests/trusted/bits/build.scons', 'tests/unittests/trusted/platform_qualify/build.scons', 'tests/unittests/trusted/service_runtime/build.scons', - 'toolchain_build/build.scons', + # 'toolchain_build/build.scons', ]) base_env.AddMethod(SDKInstallBin)