commit:     a0285db815b3604899453c215cce93df74066fdc
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 17 00:22:29 2016 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Wed Feb 17 00:22:29 2016 +0000
URL:        https://gitweb.gentoo.org/proj/sandbox.git/commit/?id=a0285db8

tests: add test for overriding mmap

URL: http://bugs.gentoo.org/290249
Reported-by: Diego E. Pettenò <flameeyes <AT> gentoo.org>
Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org>

 tests/Makefile.am       |  3 +++
 tests/execvp-0.c        | 15 +++++++++++++++
 tests/malloc-0          |  7 +++++++
 tests/malloc-1.sh       |  4 ++++
 tests/malloc.at         |  1 +
 tests/malloc_mmap_tst.c | 26 ++++++++++++++++++++++++++
 6 files changed, 56 insertions(+)

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3627344..943ce3b 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -18,6 +18,7 @@ check_PROGRAMS = \
        chown-0 \
        creat-0 \
        creat64-0 \
+       execvp-0 \
        faccessat-0 \
        fchmodat-0 \
        fchownat-0 \
@@ -72,6 +73,7 @@ check_PROGRAMS = \
        \
        getcwd-gnulib_tst \
        libsigsegv_tst \
+       malloc_mmap_tst \
        pipe-fork_tst \
        pipe-fork_static_tst \
        sb_printf_tst \
@@ -81,6 +83,7 @@ check_PROGRAMS = \
 
 dist_check_SCRIPTS = \
        $(wildcard $(srcdir)/*-[0-9]*.sh) \
+       malloc-0 \
        script-0 \
        trace-0
 

diff --git a/tests/execvp-0.c b/tests/execvp-0.c
new file mode 100644
index 0000000..6cfce13
--- /dev/null
+++ b/tests/execvp-0.c
@@ -0,0 +1,15 @@
+/*
+ * A simple wrapper for execvp.  Useful when most host programs don't match
+ * the ABI of the active libsandbox.so (e.g. 64bit vs 32bit).
+ */
+
+#include "tests.h"
+
+int main(int argc, char *argv[])
+{
+       if (argc < 2) {
+               printf("usage: execvp <path> [argv0 [argvN] ...]\n");
+               return 0;
+       }
+       return execvp(argv[1], argv + 2);
+}

diff --git a/tests/malloc-0 b/tests/malloc-0
new file mode 100755
index 0000000..9a4190b
--- /dev/null
+++ b/tests/malloc-0
@@ -0,0 +1,7 @@
+#!/bin/sh
+# make sure `timeout` is available.
+if timeout --help >/dev/null ; then
+       exit 0
+else
+       exit 77
+fi

diff --git a/tests/malloc-1.sh b/tests/malloc-1.sh
new file mode 100755
index 0000000..2b5623d
--- /dev/null
+++ b/tests/malloc-1.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Since the malloc binary is in the target ABI, make sure the exec is
+# launched from the same ABI so the same libsandbox.so is used.
+timeout -s KILL 10 execvp-0 malloc_mmap_tst malloc_mmap_tst

diff --git a/tests/malloc.at b/tests/malloc.at
new file mode 100644
index 0000000..081d7d2
--- /dev/null
+++ b/tests/malloc.at
@@ -0,0 +1 @@
+SB_CHECK(1)

diff --git a/tests/malloc_mmap_tst.c b/tests/malloc_mmap_tst.c
new file mode 100644
index 0000000..a1a15e1
--- /dev/null
+++ b/tests/malloc_mmap_tst.c
@@ -0,0 +1,26 @@
+/* Make sure programs that override mmap don't mess us up. #290249 */
+
+#include "headers.h"
+
+/* A few basic stubs that do nothing. */
+void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t 
offset)
+{
+       errno = ENOMEM;
+       return MAP_FAILED;
+}
+int munmap(void *addr, size_t length)
+{
+       errno = ENOMEM;
+       return -1;
+}
+
+int main(int argc, char *argv[])
+{
+       /* Don't loop forever. */
+       alarm(10);
+
+       /* Make sure we do an operation to trigger the sandbox. */
+       open("/dev/null", 0);
+
+       return 0;
+}

Reply via email to