summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormortimer <mortimer@openbsd.org>2019-11-27 17:15:36 +0000
committermortimer <mortimer@openbsd.org>2019-11-27 17:15:36 +0000
commit274d7c50a54c27a81553891dda2a8828c03d5fef (patch)
tree8dcdb94b605f7d93f6cc0e17d19115135baa2462
parentsync (diff)
downloadwireguard-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
-rw-r--r--regress/sys/kern/syscall_segment/Makefile14
-rw-r--r--regress/sys/kern/syscall_segment/gadgetsyscall.h9
-rw-r--r--regress/sys/kern/syscall_segment/lib/Makefile12
-rw-r--r--regress/sys/kern/syscall_segment/lib/syscall_segment.c22
-rw-r--r--regress/sys/kern/syscall_segment/libgadgetsyscall/Makefile5
-rw-r--r--regress/sys/kern/syscall_segment/libgadgetsyscall/gadgetsyscall.c2
-rw-r--r--regress/sys/kern/syscall_segment/libgadgetsyscall/shlib_version2
-rw-r--r--regress/sys/kern/syscall_segment/main/Makefile10
-rw-r--r--regress/sys/kern/syscall_segment/main/syscall_segment.c21
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;
+}