Skip to content

Commit

Permalink
lib/vdso/32: Remove inconsistent NULL pointer checks
Browse files Browse the repository at this point in the history
The 32bit variants of vdso_clock_gettime()/getres() have a NULL pointer
check for the timespec pointer. That's inconsistent vs. 64bit.

But the vdso implementation will never be consistent versus the syscall
because the only case which it can handle is NULL. Any other invalid
pointer will cause a segfault. So special casing NULL is not really useful.

Remove it along with the superflouos syscall fallback invocation as that
will return -EFAULT anyway. That also gets rid of the dubious typecast
which only works because the pointer is NULL.

Fixes: 00b2647 ("lib/vdso: Provide generic VDSO implementation")
Signed-off-by: Thomas Gleixner <[email protected]>
Tested-by: Vincenzo Frascino <[email protected]>
Reviewed-by: Vincenzo Frascino <[email protected]>
Reviewed-by: Andy Lutomirski <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]
  • Loading branch information
KAGA-KOKO committed Jul 30, 2019
1 parent 629f820 commit a9446a9
Showing 1 changed file with 2 additions and 16 deletions.
18 changes: 2 additions & 16 deletions lib/vdso/gettimeofday.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,6 @@ __cvdso_clock_gettime32(clockid_t clock, struct old_timespec32 *res)
struct __kernel_timespec ts;
int ret;

if (res == NULL)
goto fallback;

ret = __cvdso_clock_gettime(clock, &ts);

if (ret == 0) {
Expand All @@ -126,9 +123,6 @@ __cvdso_clock_gettime32(clockid_t clock, struct old_timespec32 *res)
}

return ret;

fallback:
return clock_gettime_fallback(clock, (struct __kernel_timespec *)res);
}

static __maybe_unused int
Expand Down Expand Up @@ -204,10 +198,8 @@ int __cvdso_clock_getres(clockid_t clock, struct __kernel_timespec *res)
goto fallback;
}

if (res) {
res->tv_sec = 0;
res->tv_nsec = ns;
}
res->tv_sec = 0;
res->tv_nsec = ns;

return 0;

Expand All @@ -221,9 +213,6 @@ __cvdso_clock_getres_time32(clockid_t clock, struct old_timespec32 *res)
struct __kernel_timespec ts;
int ret;

if (res == NULL)
goto fallback;

ret = __cvdso_clock_getres(clock, &ts);

if (ret == 0) {
Expand All @@ -232,8 +221,5 @@ __cvdso_clock_getres_time32(clockid_t clock, struct old_timespec32 *res)
}

return ret;

fallback:
return clock_getres_fallback(clock, (struct __kernel_timespec *)res);
}
#endif /* VDSO_HAS_CLOCK_GETRES */

0 comments on commit a9446a9

Please sign in to comment.