diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 22f94477a..2c0254477 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 69aaa7939..302b25b22 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) diff --git a/src/trusted/service_runtime/nacl_syscall_common.c b/src/trusted/service_runtime/nacl_syscall_common.c index 926c9352c..227dab02b 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); diff --git a/src/trusted/service_runtime/nacl_tls_unittest.c b/src/trusted/service_runtime/nacl_tls_unittest.c index b5deb5c63..cec5b2843 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; }