futex: fix use after free

This commit is contained in:
Matheus
2024-05-01 22:19:09 -03:00
parent 0280c89923
commit 8ff81b8f87
+5 -1
View File
@@ -79,6 +79,7 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value
uint32_t *physical = vmm_getphysical(futexp);
futex_t *futex = getfutex(physical);
bool doleave = true;
switch (op) {
case FUTEX_WAKE:
@@ -145,6 +146,7 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value
// clean up if needed
if (futex->waiting == 0) {
doleave = false;
free(futex);
removefutex(physical);
}
@@ -157,7 +159,9 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value
ret.errno = ENOSYS;
}
poll_leave(&desc);
if (doleave)
poll_leave(&desc);
poll_destroydesc(&desc);
MUTEX_RELEASE(&futexmutex);