kernel: Adjust timeout computation for syscall_restart.

If the timeout is already >= B_INFINITE_TIMEOUT, we do not need
to do any of the following math (which would usually overflow anyway)
and can leave the timeout alone.

Spotted by kernel undefined behavior sanitizer.
This commit is contained in:
Augustin Cavalier
2021-08-27 18:57:50 -04:00
parent 3ca830e364
commit 9c91c3b5a2
+2 -2
View File
@@ -50,8 +50,8 @@ syscall_restart_handle_timeout_pre(uint32& flags, bigtime_t& timeout)
timeout = *(bigtime_t*)thread->syscall_restart.parameters;
if (timeout > 0 && (flags & B_RELATIVE_TIMEOUT) != 0)
flags = (flags & ~B_RELATIVE_TIMEOUT) | B_ABSOLUTE_TIMEOUT;
} else if ((flags & B_RELATIVE_TIMEOUT) != 0) {
if (timeout > 0) {
} else if ((flags & B_RELATIVE_TIMEOUT)) {
if (timeout > 0 && timeout < B_INFINITE_TIMEOUT) {
timeout += system_time();
// deal with overflow
if (timeout < 0)