Skip to content

Commit 53d7027

Browse files
authored
Implement strict validation of thread IDs according to the specification (#2521)
1 parent 411b903 commit 53d7027

File tree

7 files changed

+11
-13
lines changed

7 files changed

+11
-13
lines changed

core/iwasm/libraries/lib-wasi-threads/test/create_threads_until_limit.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ main(int argc, char **argv)
6565
assert(start_args_init(&data[i].base));
6666
thread_ids[i] = __wasi_thread_spawn(&data[i]);
6767
printf("Thread created with id=%d\n", thread_ids[i]);
68-
assert(thread_ids[i] > 0 && "Thread creation failed");
68+
ASSERT_VALID_TID(thread_ids[i]);
6969

7070
for (int j = 0; j < i; j++) {
7171
assert(thread_ids[i] != thread_ids[j] && "Duplicated TIDs");

core/iwasm/libraries/lib-wasi-threads/test/global_atomic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ main(int argc, char **argv)
4949
for (int i = 0; i < NUM_THREADS; i++) {
5050
assert(start_args_init(&data[i].base));
5151
thread_ids[i] = __wasi_thread_spawn(&data[i]);
52-
assert(thread_ids[i] > 0 && "Thread creation failed");
52+
ASSERT_VALID_TID(thread_ids[i]);
5353
}
5454

5555
printf("Wait for threads to finish\n");

core/iwasm/libraries/lib-wasi-threads/test/global_lock.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ main(int argc, char **argv)
6161
for (int i = 0; i < NUM_THREADS; i++) {
6262
assert(start_args_init(&data[i].base));
6363
thread_ids[i] = __wasi_thread_spawn(&data[i]);
64-
assert(thread_ids[i] > 0 && "Thread creation failed");
64+
ASSERT_VALID_TID(thread_ids[i]);
6565
}
6666

6767
printf("Wait for threads to finish\n");

core/iwasm/libraries/lib-wasi-threads/test/trap_after_main_thread_finishes.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ main(int argc, char **argv)
3838

3939
assert(start_args_init(&data.base));
4040
int thread_id = __wasi_thread_spawn(&data);
41-
assert(thread_id > 0 && "Thread creation failed");
41+
ASSERT_VALID_TID(thread_id);
4242

4343
return EXIT_SUCCESS;
4444
}

core/iwasm/libraries/lib-wasi-threads/test/update_shared_data_and_alloc_heap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ main(int argc, char **argv)
6969
data[i].iteration = i;
7070

7171
thread_ids[i] = __wasi_thread_spawn(&data[i]);
72-
assert(thread_ids[i] > 0 && "Thread creation failed");
72+
ASSERT_VALID_TID(thread_ids[i]);
7373
}
7474

7575
printf("Wait for threads to finish\n");

samples/wasi-threads/wasm-apps/no_pthread.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,18 @@ main(int argc, char **argv)
5050
}
5151

5252
thread_id = __wasi_thread_spawn(&data);
53-
if (thread_id < 0) {
54-
printf("Failed to create thread: %d\n", thread_id);
55-
ret = EXIT_FAILURE;
56-
goto final;
57-
}
53+
ASSERT_VALID_TID(thread_id);
5854

5955
if (__builtin_wasm_memory_atomic_wait32(&data.th_ready, 0, SECOND) == 2) {
6056
printf("Timeout\n");
61-
ret = EXIT_FAILURE;
62-
goto final;
57+
return EXIT_FAILURE;
6358
}
6459

6560
printf("Thread completed, new value: %d, thread id: %d\n", data.value,
6661
data.thread_id);
6762

6863
assert(thread_id == data.thread_id);
6964

70-
final:
7165
start_args_deinit(&data.base);
7266

7367
return ret;

samples/wasi-threads/wasm-apps/wasi_thread_start.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77

88
#define STACK_SIZE 32 * 1024 // same as the main stack
99

10+
/* See https://github.com/WebAssembly/wasi-threads#design-choice-thread-ids */
11+
#define ASSERT_VALID_TID(TID) \
12+
assert(TID >= 1 && TID <= 0x1FFFFFFF && "Invalid thread ID")
13+
1014
typedef struct {
1115
void *stack;
1216
} start_args_t;

0 commit comments

Comments
 (0)