summaryrefslogtreecommitdiff
path: root/src/regress/lib/libc/sys
diff options
context:
space:
mode:
authorkettenis <>2020-10-21 16:26:28 +0000
committerkettenis <>2020-10-21 16:26:28 +0000
commita9540bd67ec5f006bee47892ddd57a679b353ba3 (patch)
tree98a785c43fc167cf1acafdd9729c83c64add8481 /src/regress/lib/libc/sys
parent98a8d4e406fc605918198ca092f495a5800f197c (diff)
downloadopenbsd-a9540bd67ec5f006bee47892ddd57a679b353ba3.tar.gz
openbsd-a9540bd67ec5f006bee47892ddd57a679b353ba3.tar.bz2
openbsd-a9540bd67ec5f006bee47892ddd57a679b353ba3.zip
On machines with a userland timecounter we bypass the gettimeofday(2)
syscall. So whenever we pass a bad address we get a SIGSEGV instead of EFAULT. POSIX explicitly allows this behaviour. So adjust the test to deal with this case. ok deraadt@, millert@, guenther@
Diffstat (limited to 'src/regress/lib/libc/sys')
-rw-r--r--src/regress/lib/libc/sys/t_gettimeofday.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/regress/lib/libc/sys/t_gettimeofday.c b/src/regress/lib/libc/sys/t_gettimeofday.c
index de768b023a..ec4a72c63e 100644
--- a/src/regress/lib/libc/sys/t_gettimeofday.c
+++ b/src/regress/lib/libc/sys/t_gettimeofday.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: t_gettimeofday.c,v 1.1.1.1 2019/11/19 19:57:03 bluhm Exp $ */ 1/* $OpenBSD: t_gettimeofday.c,v 1.2 2020/10/21 16:26:28 kettenis Exp $ */
2/* $NetBSD: t_gettimeofday.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $ */ 2/* $NetBSD: t_gettimeofday.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $ */
3 3
4/*- 4/*-
@@ -41,6 +41,14 @@ __RCSID("$NetBSD: t_gettimeofday.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
41#include <errno.h> 41#include <errno.h>
42#include <string.h> 42#include <string.h>
43 43
44static void sighandler(int);
45
46static void
47sighandler(int signo)
48{
49 _exit(0);
50}
51
44ATF_TC(gettimeofday_err); 52ATF_TC(gettimeofday_err);
45ATF_TC_HEAD(gettimeofday_err, tc) 53ATF_TC_HEAD(gettimeofday_err, tc)
46{ 54{
@@ -50,8 +58,14 @@ ATF_TC_HEAD(gettimeofday_err, tc)
50ATF_TC_BODY(gettimeofday_err, tc) 58ATF_TC_BODY(gettimeofday_err, tc)
51{ 59{
52 60
53 errno = 0; 61 /*
62 * With userland timecounters we will generate SIGSEGV instead
63 * of failing with errno so to EFAULT. POSIX explicitly
64 * allows this behaviour.
65 */
66 ATF_REQUIRE(signal(SIGSEGV, sighandler) != SIG_ERR);
54 67
68 errno = 0;
55 ATF_REQUIRE_ERRNO(EFAULT, gettimeofday((void *)-1, NULL) != 0); 69 ATF_REQUIRE_ERRNO(EFAULT, gettimeofday((void *)-1, NULL) != 0);
56} 70}
57 71