From efecdade641add0e5fb86cf597683fef23c4f5a1 Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 9 May 2024 13:06:51 -0300 Subject: [PATCH] waitpid: fix use after free --- kernel-src/sys/syscalls/waitpid.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel-src/sys/syscalls/waitpid.c b/kernel-src/sys/syscalls/waitpid.c index be4f55a2..1e2d5db9 100644 --- a/kernel-src/sys/syscalls/waitpid.c +++ b/kernel-src/sys/syscalls/waitpid.c @@ -75,6 +75,12 @@ syscallret_t syscall_waitpid(context_t *context, pid_t pid, int *status, int opt for (int i = 0; i < iterator->threadtablesize; ++i) { if (iterator->threads[i] == NULL) continue; + + volatile int *flags = (volatile int *)(&iterator->threads[i]->flags); + // wait until the thread can actually be unallocated + while ((*flags & SCHED_THREAD_FLAGS_DEAD) == 0) + sched_yield(); + sched_destroythread(iterator->threads[i]); }