kselftest/arm64: Fix size of thread_data values for pthread_join()
PATCH 1/1 kselftest/arm64: Fix size of thread_data values for pthread_join()
pthread_join() stores the thread's return value (a "void *", i.e. 8 bytes on 64 bit computers) into the address that is passed as second parameter. However, the entries of thread_data are only normal "int"s, i.e. only 4 bytes. The additional 4 bytes of the return value clobber whatever is adjacent on the stack, i.e. other members of the thread_data array (which will be re-written in the next iteration of the for-loop, so that nobody noticed this problem), or another other local variable on the stack for the last iteration. Use "intptr_t" to declare the thread_data array entries with the correct size.
--- tools/testing/selftests/arm64/mte/check_gcr_el1_cswitch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/arm64/mte/check_gcr_el1_cswitch.c +1 -1
@@ -69,7 +69,7 @@ void *execute_thread(void *x)int execute_test (pid_t pid) {pthread_t thread_id[MAX_THREADS ]; -int thread_data[MAX_THREADS ]; +intptr_t thread_data[MAX_THREADS ];for (int i =0 ; i <MAX_THREADS ; i++) pthread_create(&thread_id[i], NULL,
Signature · 1 line
2.55.0
Quoted 11 lines · Thomas Huth
pthread_join()stores the thread's return value (a "void *", i.e. 8 bytes on 64 bit computers) into the address that is passed as second parameter. However, the entries ofthread_dataare only normal "int"s, i.e. only 4 bytes. The additional 4 bytes of the return value clobber whatever is adjacent on the stack, i.e. other members of thethread_dataarray (which will be re-written in the next iteration of the for-loop, so that nobody noticed this problem), or another other local variable on the stack for the last iteration. Use "intptr_t" to declare thethread_dataarray entries with the correct size.[...]
Applied to arm64 (for-next/fixes), thanks!
[1/1] kselftest/arm64: Fix size of thread_data values for pthread_join()
https://git.kernel.org/arm64/c/3d1ba5cbfb62
Cheers,
Signature · 5 lines
Will https://fixes.arm64.dev https://next.arm64.dev https://will.arm64.dev