From 41acfee690da6289d570338e6365c1d7ef61dad5 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sat, 12 Aug 2023 18:45:43 +0300 Subject: [PATCH] libc vdso time functions: correctly convert errors into errnos Sponsored by: The FreeBSD Foundation MFC after: 1 week --- lib/libc/sys/clock_gettime.c | 6 +++++- lib/libc/sys/gettimeofday.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/libc/sys/clock_gettime.c b/lib/libc/sys/clock_gettime.c index ec8ec13a754..b2a41445524 100644 --- a/lib/libc/sys/clock_gettime.c +++ b/lib/libc/sys/clock_gettime.c @@ -48,7 +48,11 @@ __clock_gettime(clockid_t clock_id, struct timespec *ts) error = __vdso_clock_gettime(clock_id, ts); else error = ENOSYS; - if (error == ENOSYS) + if (error == ENOSYS) { error = __sys_clock_gettime(clock_id, ts); + } else if (error != 0) { + errno = error; + error = -1; + } return (error); } diff --git a/lib/libc/sys/gettimeofday.c b/lib/libc/sys/gettimeofday.c index 22177b15a5c..d955aaa907e 100644 --- a/lib/libc/sys/gettimeofday.c +++ b/lib/libc/sys/gettimeofday.c @@ -44,7 +44,11 @@ __gettimeofday(struct timeval *tv, struct timezone *tz) int error; error = __vdso_gettimeofday(tv, tz); - if (error == ENOSYS) + if (error == ENOSYS) { error = __sys_gettimeofday(tv, tz); + } else if (error != 0) { + errno = error; + error = -1; + } return (error); }