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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user