]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
lib/posix-process/signal: Check canonical timeout on rt_sigtimedwait
authorMichalis Pappas <michalis@unikraft.io>
Wed, 30 Apr 2025 16:10:54 +0000 (18:10 +0200)
committerUnikraft Bot <monkey@unikraft.io>
Fri, 2 May 2025 16:11:03 +0000 (16:11 +0000)
Add check to ensure that the timeout value passed to rt_sigtimedwait()
is canonical.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1639

lib/posix-process/signal/rt_sigtimedwait.c

index 4fe54762b807fbaeeacb8db8ea2f881c7e2b1ab8..65119968d2c0ae1a83fe97395e681025a17d67cd 100644 (file)
@@ -46,11 +46,15 @@ UK_LLSYSCALL_R_DEFINE(int, rt_sigtimedwait,
        if ((sig = pprocess_signal_next_pending_t(pthread)))
                goto out;
 
-       if (timeout)
+       if (timeout) {
+               if (unlikely(!(uk_time_spec_canonical(timeout) &&
+                              uk_time_spec_positive(timeout))))
+                       return -EINVAL;
                uk_semaphore_down_to(&pthread->signal->pending_semaphore,
                                     uk_time_spec_to_nsec(timeout));
-       else
+       } else {
                uk_semaphore_down(&pthread->signal->pending_semaphore);
+       }
 
        if ((sig = pprocess_signal_next_pending_t(pthread)))
                goto out;