1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 09:04:59 +00:00

LibC: Don't delete null check in gettimeofday

The `nonnull` attribute may delete null checks in the generated code, as
per the [GCC documentation]:

> The compiler may also perform optimizations based on the knowledge
> that nonnul parameters cannot be null. This can currently not be
> disabled other than by removing the nonnull attribute.

Disassembling the function as compiled by GCC, we can see that there is
no branch based on if `tv` is null.  This means that `gettimeofday`
would produce UB if passed a null parameter, even if we wanted to
predictably return an error.  Clang refuses to compile this due to a
`pointer-bool-conversion` warning.

In this commit, `settimeofday` is changed as well to match
`gettimeofday`'s null argument handling.

[GCC documentation]:
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-nonnull-function-attribute
This commit is contained in:
Daniel Bertalan 2021-08-11 10:36:08 +02:00 committed by Andreas Kling
parent 8b6397446e
commit f95a11a7da
2 changed files with 7 additions and 2 deletions

View file

@ -54,6 +54,11 @@ int gettimeofday(struct timeval* __restrict__ tv, void* __restrict__)
int settimeofday(struct timeval* __restrict__ tv, void* __restrict__)
{
if (!tv) {
errno = EFAULT;
return -1;
}
timespec ts;
TIMEVAL_TO_TIMESPEC(tv, &ts);
return clock_settime(CLOCK_REALTIME, &ts);