diff options
author | 2019-11-27 17:15:36 +0000 | |
---|---|---|
committer | 2019-11-27 17:15:36 +0000 | |
commit | 274d7c50a54c27a81553891dda2a8828c03d5fef (patch) | |
tree | 8dcdb94b605f7d93f6cc0e17d19115135baa2462 | |
parent | sync (diff) | |
download | wireguard-openbsd-274d7c50a54c27a81553891dda2a8828c03d5fef.tar.xz wireguard-openbsd-274d7c50a54c27a81553891dda2a8828c03d5fef.zip |
Add regress tests for making syscalls from the main program text and from
a shared library.
ok deraadt
9 files changed, 97 insertions, 0 deletions
diff --git a/regress/sys/kern/syscall_segment/Makefile b/regress/sys/kern/syscall_segment/Makefile new file mode 100644 index 00000000000..8f07fbe5b31 --- /dev/null +++ b/regress/sys/kern/syscall_segment/Makefile @@ -0,0 +1,14 @@ +# $OpenBSD: Makefile,v 1.1 2019/11/27 17:15:36 mortimer Exp $ + +.if ${MACHINE} != "amd64" +REGRESS_TARGETS=run-regress-skiparch +run-regress-skiparch: + # Need syscall asm for this arch + @echo SKIPPED +.include <bsd.regress.mk> +.else +SUBDIR += main +SUBDIR += libgadgetsyscall +SUBDIR += lib +.include <bsd.subdir.mk> +.endif diff --git a/regress/sys/kern/syscall_segment/gadgetsyscall.h b/regress/sys/kern/syscall_segment/gadgetsyscall.h new file mode 100644 index 00000000000..a683faf52b8 --- /dev/null +++ b/regress/sys/kern/syscall_segment/gadgetsyscall.h @@ -0,0 +1,9 @@ +/* $OpenBSD: gadgetsyscall.h,v 1.1 2019/11/27 17:15:36 mortimer Exp $ */ + +pid_t gadget_getpid() { + pid_t ans = 0; +#if defined(__amd64__) + asm("mov $0x14, %%eax; syscall; mov %%eax, %0;" :"=r"(ans)::"%eax", "%ecx", "%r11"); +#endif + return ans; +} diff --git a/regress/sys/kern/syscall_segment/lib/Makefile b/regress/sys/kern/syscall_segment/lib/Makefile new file mode 100644 index 00000000000..e7c1b408db2 --- /dev/null +++ b/regress/sys/kern/syscall_segment/lib/Makefile @@ -0,0 +1,12 @@ +# $OpenBSD: Makefile,v 1.1 2019/11/27 17:15:36 mortimer Exp $ + +PROG= syscall_segment +LIBDIR= ${.CURDIR}/../libgadgetsyscall/${__objdir} +LDADD+= -L${LIBDIR} -lgadgetsyscall + +run-regress-${PROG}: ${PROG} + rm -f ./${PROG}.core + if LD_LIBRARY_PATH=${LIBDIR} ./${PROG}; then false; else true; fi + if [ ! -e ./${PROG}.core ]; then echo "No coredump"; false; fi + +.include <bsd.regress.mk> diff --git a/regress/sys/kern/syscall_segment/lib/syscall_segment.c b/regress/sys/kern/syscall_segment/lib/syscall_segment.c new file mode 100644 index 00000000000..6da4b706819 --- /dev/null +++ b/regress/sys/kern/syscall_segment/lib/syscall_segment.c @@ -0,0 +1,22 @@ +/* $OpenBSD: syscall_segment.c,v 1.1 2019/11/27 17:15:36 mortimer Exp $ */ + +#include <stdlib.h> +#include <unistd.h> + +pid_t gadget_getpid(); + +int +main(int argc, char *argv[]) +{ + /* get my pid doing using the libc path, + * then try again with some inline asm + * if we are not killed, and get the same + * answer, then the test fails + */ + pid_t pid = getpid(); + pid_t pid2 = gadget_getpid(); + if (pid == pid2) + return 1; + + return 0; +} diff --git a/regress/sys/kern/syscall_segment/libgadgetsyscall/Makefile b/regress/sys/kern/syscall_segment/libgadgetsyscall/Makefile new file mode 100644 index 00000000000..a91b791f29b --- /dev/null +++ b/regress/sys/kern/syscall_segment/libgadgetsyscall/Makefile @@ -0,0 +1,5 @@ + +LIB= gadgetsyscall +SRCS= gadgetsyscall.c + +.include <bsd.lib.mk> diff --git a/regress/sys/kern/syscall_segment/libgadgetsyscall/gadgetsyscall.c b/regress/sys/kern/syscall_segment/libgadgetsyscall/gadgetsyscall.c new file mode 100644 index 00000000000..32a2e6cb47d --- /dev/null +++ b/regress/sys/kern/syscall_segment/libgadgetsyscall/gadgetsyscall.c @@ -0,0 +1,2 @@ +#include <unistd.h> +#include "../gadgetsyscall.h" diff --git a/regress/sys/kern/syscall_segment/libgadgetsyscall/shlib_version b/regress/sys/kern/syscall_segment/libgadgetsyscall/shlib_version new file mode 100644 index 00000000000..97c9f92d6b8 --- /dev/null +++ b/regress/sys/kern/syscall_segment/libgadgetsyscall/shlib_version @@ -0,0 +1,2 @@ +major=0 +minor=0 diff --git a/regress/sys/kern/syscall_segment/main/Makefile b/regress/sys/kern/syscall_segment/main/Makefile new file mode 100644 index 00000000000..373375cb183 --- /dev/null +++ b/regress/sys/kern/syscall_segment/main/Makefile @@ -0,0 +1,10 @@ +# $OpenBSD: Makefile,v 1.1 2019/11/27 17:15:36 mortimer Exp $ + +PROG=syscall_segment + +run-regress-${PROG}: ${PROG} + rm -f ./${PROG}.core + if ./${PROG}; then false; else true; fi + if [ ! -e ./${PROG}.core ]; then echo "No coredump"; false; fi + +.include <bsd.regress.mk> diff --git a/regress/sys/kern/syscall_segment/main/syscall_segment.c b/regress/sys/kern/syscall_segment/main/syscall_segment.c new file mode 100644 index 00000000000..670183a167c --- /dev/null +++ b/regress/sys/kern/syscall_segment/main/syscall_segment.c @@ -0,0 +1,21 @@ +/* $OpenBSD: syscall_segment.c,v 1.1 2019/11/27 17:15:36 mortimer Exp $ */ + +#include <stdlib.h> +#include <unistd.h> +#include "../gadgetsyscall.h" + +int +main(int argc, char *argv[]) +{ + /* get my pid doing using the libc path, + * then try again with some inline asm + * if we are not killed, and get the same + * answer, then the test fails + */ + pid_t pid = getpid(); + pid_t pid2 = gadget_getpid(); + if (pid == pid2) + return 1; + + return 0; +} |