From 19acfb64b9a0b875816017b031c19e36ef4257b3 Mon Sep 17 00:00:00 2001 From: Jinen Gandhi Date: Thu, 18 Feb 2021 00:08:30 -0600 Subject: [PATCH] [CI, LTP] Add MAP_PRIVATE patch to LTP sources and enable LTP in SGX CI Signed-off-by: Jinen Gandhi --- .ci/lib/stage-test-sgx.jenkinsfile | 12 + .gitmodules | 1 + LibOS/shim/test/ltp/.gitignore | 5 +- LibOS/shim/test/ltp/Makefile | 24 +- LibOS/shim/test/ltp/ltp-bug-1075.cfg | 180 -------- LibOS/shim/test/ltp/ltp-sgx.cfg | 465 ++------------------- LibOS/shim/test/ltp/ltp.cfg | 15 - LibOS/shim/test/ltp/ltp_sgx_mmap_fix.patch | 17 + LibOS/shim/test/ltp/makevars.mk | 9 +- 9 files changed, 90 insertions(+), 638 deletions(-) create mode 100644 LibOS/shim/test/ltp/ltp_sgx_mmap_fix.patch diff --git a/.ci/lib/stage-test-sgx.jenkinsfile b/.ci/lib/stage-test-sgx.jenkinsfile index 8f6cb2820d..930c7d1b1d 100644 --- a/.ci/lib/stage-test-sgx.jenkinsfile +++ b/.ci/lib/stage-test-sgx.jenkinsfile @@ -1,4 +1,16 @@ stage('test-sgx') { + timeout(time: 45, unit: 'MINUTES') { + try { + sh ''' + cd LibOS/shim/test/ltp + make ${MAKEOPTS} all sgx-tokens + make ltp-sgx.xml + ''' + } finally { + archiveArtifacts 'LibOS/shim/test/ltp/ltp-sgx.xml' + junit 'LibOS/shim/test/ltp/ltp-sgx.xml' + } + } timeout(time: 5, unit: 'MINUTES') { sh ''' cd Examples/python-simple diff --git a/.gitmodules b/.gitmodules index 27e6d54987..a4ec7e43f3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "LibOS/shim/test/ltp/src"] path = LibOS/shim/test/ltp/src url = https://github.com/linux-test-project/ltp.git + ignore = dirty diff --git a/LibOS/shim/test/ltp/.gitignore b/LibOS/shim/test/ltp/.gitignore index d91ef7384a..9c96dc7d0f 100644 --- a/LibOS/shim/test/ltp/.gitignore +++ b/LibOS/shim/test/ltp/.gitignore @@ -1,4 +1,5 @@ -/build/ -/install/ +/build*/ +/install*/ /ltp*.xml /pal_loader +/PATCH_APPLIED diff --git a/LibOS/shim/test/ltp/Makefile b/LibOS/shim/test/ltp/Makefile index c189826746..b5ddd4ec07 100644 --- a/LibOS/shim/test/ltp/Makefile +++ b/LibOS/shim/test/ltp/Makefile @@ -21,8 +21,24 @@ $(SRCDIR)/Makefile: $(SRCDIR)/configure: $(SRCDIR)/Makefile $(MAKE) -C $(SRCDIR) autotools +.SECONDARY: $(ROOTDIR)/PATCH_APPLIED +$(ROOTDIR)/PATCH_APPLIED: + # To run LTP tests with SGX (which doesn't support shared memory mappings), + # as a workaround we change the mmap flag from MAP_SHARED to MAP_PRIVATE + # (unintuitively, the LTP framework still works correctly with this change) + # No such change is intended for LTP tests with non-SGX. + $(eval export patch-status = $(shell patch -p1 -l -N -s --dry-run < ltp_sgx_mmap_fix.patch 1>&2 2> /dev/null; echo $$?)) + @if [ $(SGX) = 1 -a $(patch-status) = 0 ] ; then \ + patch -p1 -l < ltp_sgx_mmap_fix.patch; \ + touch $@; \ + else \ + if [ $(SGX) = 0 -a $(patch-status) = 1 ]; then \ + patch -R -s -f -i ltp_sgx_mmap_fix.patch src/lib/tst_test.c; \ + fi; \ + fi + .SECONDARY: $(BUILDDIR)/BUILD_SUCCESS -$(BUILDDIR)/BUILD_SUCCESS: $(SRCDIR)/configure +$(BUILDDIR)/BUILD_SUCCESS: $(SRCDIR)/configure $(ROOTDIR)/PATCH_APPLIED # Out-of-tree build steps were taken from ltp/INSTALL. # The instructions below assume that SRCDIR and BUILDDIR are absolute. mkdir -p $(BUILDDIR) @@ -53,7 +69,7 @@ sgx-tokens: build-manifest .PHONY: regression regression: -ifeq ($(SGX),"1") +ifeq ($(SGX),1) $(RM) ltp-sgx.xml $(MAKE) ltp-sgx.xml else @@ -66,9 +82,9 @@ ltp-sgx.xml: CFG = ltp.cfg ltp-sgx.cfg ltp-bug-1075.cfg %.xml: $(CFG) $(target) $(INSTALLDIR)/INSTALL_SUCCESS ./contrib/conf_lint.py $(CFG) --scenario $(LTPSCENARIO) - ./runltp_xml.py $(RUNLTPOPTS) $(foreach cfg,$(CFG),-c $(cfg)) $(LTPSCENARIO) -O $@ + ./runltp_xml.py $(RUNLTPOPTS) $(foreach cfg,$(CFG),-c $(cfg)) $(LTPSCENARIO) -o ltproot=$(LTPROOT) -O $@ .PHONY: clean-build clean-build: $(MAKE) -C $(SRCDIR) clean - $(RM) -r $(BUILDDIR) $(INSTALLDIR) ltp*.xml + $(RM) -r build* install* ltp*.xml PATCH_APPLIED diff --git a/LibOS/shim/test/ltp/ltp-bug-1075.cfg b/LibOS/shim/test/ltp/ltp-bug-1075.cfg index d01a18ee51..b8472d5d62 100644 --- a/LibOS/shim/test/ltp/ltp-bug-1075.cfg +++ b/LibOS/shim/test/ltp/ltp-bug-1075.cfg @@ -1,12 +1,3 @@ -[abort01] -skip = yes - -[accept01] -skip = yes - -[accept4_01] -skip = yes - [access01] skip = yes @@ -34,27 +25,6 @@ skip = yes [add_key04] skip = yes -[alarm02] -skip = yes - -[alarm03] -skip = yes - -[alarm05] -skip = yes - -[alarm06] -skip = yes - -[alarm07] -skip = yes - -[bind03] -skip = yes - -[brk01] -skip = yes - [chmod05] skip = yes @@ -70,33 +40,18 @@ skip = yes [clock_adjtime02] skip = yes -[clock_getres01] -skip = yes - [clock_gettime02] skip = yes -[clock_nanosleep01] -skip = yes - [clone09] skip = yes [copy_file_range01] skip = yes -[creat01] -skip = yes - -[creat03] -skip = yes - [creat04] skip = yes -[creat05] -skip = yes - [creat06] skip = yes @@ -154,9 +109,6 @@ skip = yes [execvp01] skip = yes -[exit02] -skip = yes - [fallocate04] skip = yes @@ -199,9 +151,6 @@ skip = yes [fchdir03] skip = yes -[fchmod01] -skip = yes - [fchmod02] skip = yes @@ -211,24 +160,6 @@ skip = yes [fchmod06] skip = yes -[fcntl02] -skip = yes - -[fcntl02_64] -skip = yes - -[fcntl03] -skip = yes - -[fcntl03_64] -skip = yes - -[fcntl04] -skip = yes - -[fcntl04_64] -skip = yes - [fcntl33] skip = yes @@ -298,45 +229,15 @@ skip = yes [ftruncate04_64] skip = yes -[futex_wait05] -skip = yes - [getcpu01] skip = yes -[getcwd01] -skip = yes - -[getcwd02] -skip = yes - [getcwd03] skip = yes -[getcwd04] -skip = yes - -[getpriority01] -skip = yes - [getpriority02] skip = yes -[getrandom01] -skip = yes - -[getrandom02] -skip = yes - -[getrandom03] -skip = yes - -[getrandom04] -skip = yes - -[getrlimit03] -skip = yes - [getsockopt02] skip = yes @@ -439,12 +340,6 @@ skip = yes [llistxattr03] skip = yes -[lseek01] -skip = yes - -[lseek07] -skip = yes - [lseek11] skip = yes @@ -454,9 +349,6 @@ skip = yes [madvise02] skip = yes -[madvise05] -skip = yes - [madvise06] skip = yes @@ -520,9 +412,6 @@ skip = yes [msgctl12] skip = yes -[msgget01] -skip = yes - [msgget02] skip = yes @@ -532,9 +421,6 @@ skip = yes [msgsnd02] skip = yes -[msgsnd05] -skip = yes - [msgsnd06] skip = yes @@ -544,9 +430,6 @@ skip = yes [msync04] skip = yes -[nanosleep01] -skip = yes - [nanosleep02] skip = yes @@ -586,9 +469,6 @@ skip = yes [pipe03] skip = yes -[pipe11] -skip = yes - [pivot_root01] skip = yes @@ -649,12 +529,6 @@ skip = yes [ptrace07] skip = yes -[pwrite02] -skip = yes - -[pwrite02_64] -skip = yes - [pwrite03] skip = yes @@ -682,9 +556,6 @@ skip = yes [quotactl01] skip = yes -[read01] -skip = yes - [read02] skip = yes @@ -724,18 +595,12 @@ skip = yes [request_key05] skip = yes -[rmdir01] -skip = yes - [rmdir02] skip = yes [rmdir03] skip = yes -[rt_sigsuspend01] -skip = yes - [rt_tgsigqueueinfo01] skip = yes @@ -751,9 +616,6 @@ skip = yes [semctl01] skip = yes -[sendto02] -skip = yes - [setpriority01] skip = yes @@ -787,9 +649,6 @@ skip = yes [setrlimit02] skip = yes -[setrlimit03] -skip = yes - [setrlimit04] skip = yes @@ -802,12 +661,6 @@ skip = yes [setsockopt02] skip = yes -[setsockopt03] -skip = yes - -[setuid01] -skip = yes - [setuid01_16] skip = yes @@ -838,21 +691,6 @@ skip = yes [shmat03] skip = yes -[sigpending02] -skip = yes - -[socket01] -skip = yes - -[socket02] -skip = yes - -[socketpair01] -skip = yes - -[socketpair02] -skip = yes - [splice01] skip = yes @@ -892,9 +730,6 @@ skip = yes [syncfs01] skip = yes -[syscall01] -skip = yes - [sysctl01] skip = yes @@ -931,9 +766,6 @@ skip = yes [umount03] skip = yes -[uname04] -skip = yes - [unlink05] skip = yes @@ -958,12 +790,6 @@ skip = yes [vmsplice02] skip = yes -[wait401] -skip = yes - -[waitpid01] -skip = yes - [waitpid06] skip = yes @@ -988,9 +814,6 @@ skip = yes [waitpid13] skip = yes -[write01] -skip = yes - [write02] skip = yes @@ -1003,8 +826,5 @@ skip = yes [write05] skip = yes -[writev01] -skip = yes - [writev07] skip = yes diff --git a/LibOS/shim/test/ltp/ltp-sgx.cfg b/LibOS/shim/test/ltp/ltp-sgx.cfg index 52d6765cf3..5c0be3e4d5 100644 --- a/LibOS/shim/test/ltp/ltp-sgx.cfg +++ b/LibOS/shim/test/ltp/ltp-sgx.cfg @@ -5,21 +5,16 @@ timeout = 45 sgx = yes -[abort01] -skip = yes - -[accept01] -skip = yes - [accept4_01] -skip = yes +must-pass = + 1 + 2 [access03] skip = yes [alarm02] timeout = 60 -skip = yes [alarm03] timeout = 60 @@ -43,144 +38,52 @@ skip = yes [brk01] timeout = 60 -[fstat03] -skip = yes - -[fstat03_64] -skip = yes - -[fstatat01] +[chmod03] skip = yes -[fsync03] -timeout = 60 -must-pass = - 1 - -[ftruncate01] +[chmod04] skip = yes -[ftruncate01_64] +[epoll_wait01] skip = yes -[ftruncate03] +[epoll_wait03] skip = yes -[ftruncate03_64] +[fork06] skip = yes -[futex_wait01] +[fork11] skip = yes -[futex_wait03] -skip = yes - -[futex_wait04] -skip = yes - -[futex_wait05] -skip = yes - -[futex_wait_bitset01] -skip = yes - -[futex_wake01] -skip = yes - -[getcontext01] -skip = yes - -[getcwd01] -skip = yes - -[getcwd02] -skip = yes - -[getcwd04] +[fstat03] skip = yes -[getdents02] +[fstat03_64] skip = yes -[getdomainname01] -skip = yes +[fsync03] +timeout = 60 +must-pass = + 3 + 4 -[getegid01] +[futex_wait03] skip = yes [getegid02] skip = yes -[geteuid01] -skip = yes - [geteuid02] skip = yes -[getgid01] -skip = yes - [getgid03] timeout = 60 skip = yes -[getgroups01] -skip = yes - -[getgroups03] -skip = yes - -[gethostbyname_r01] -skip = yes - -[gethostname01] -timeout = 60 - -[getpagesize01] -skip = yes - -[getpeername01] -skip = yes - -[getpgid01] -skip = yes - -[getpgrp01] -skip = yes - -[getpid01] -skip = yes - -[getpid02] -timeout = 60 - -[getppid01] -skip = yes - -[getrandom01] -skip = yes - -[getrandom02] -skip = yes - -[getrandom03] -skip = yes - -[getrandom04] -skip = yes - -[getrlimit01] -skip = yes - -[getrlimit02] -skip = yes - [getsid01] skip = yes -[getsockname01] -skip = yes - [getsockopt01] must-pass = 1 @@ -196,9 +99,6 @@ skip = yes [gettid01] timeout = 60 -[getuid01] -skip = yes - [getuid03] skip = yes @@ -207,29 +107,16 @@ skip = yes [kill09] timeout = 80 -skip = yes [kill11] skip = yes -[llseek03] -skip = yes - -[lseek01] -skip = yes - -[lseek07] -skip = yes - [madvise01] skip = yes [madvise02] skip = yes -[madvise05] -skip = yes - [madvise06] skip = yes @@ -245,25 +132,10 @@ skip = yes [madvise10] skip = yes -[mallopt01] -skip = yes - -[memcmp01] -skip = yes - -[memcpy01] -skip = yes - -[memset01] -skip = yes - [mincore01] skip = yes -[mkdirat01] -skip = yes - -[mknod01] +[mkdir09] skip = yes [mknod02] @@ -288,51 +160,18 @@ skip = yes [mknod08] skip = yes -[mknod09] -skip = yes - -[mknodat01] -skip = yes - [mknodat02] skip = yes -[mlock03] -skip = yes - -[mmap02] -skip = yes - -[mmap03] -skip = yes - -[mmap04] -skip = yes - [mmap05] skip = yes -[mmap06] -skip = yes - -[mmap07] -skip = yes - -[mmap08] -skip = yes - [mmap09] skip = yes [mmap13] skip = yes -[mmap15] -skip = yes - -[mprotect01] -skip = yes - [mprotect02] skip = yes @@ -342,9 +181,6 @@ skip = yes [mprotect04] skip = yes -[msgget01] -skip = yes - [msgrcv01] skip = yes @@ -362,12 +198,6 @@ skip = yes [munmap02] skip = yes -[munmap03] -skip = yes - -[nanosleep01] -skip = yes - [newuname01] timeout = 60 @@ -380,12 +210,6 @@ skip = yes [open02] skip = yes -[open03] -skip = yes - -[open04] -skip = yes - [open05] skip = yes @@ -399,9 +223,6 @@ skip = yes must-pass = 2 -[open09] -skip = yes - [open10] skip = yes @@ -417,43 +238,19 @@ skip = yes [open14] skip = yes -[openat01] -skip = yes - [openat02] skip = yes [openat03] skip = yes -[pathconf01] -skip = yes - -[personality02] -skip = yes - [pipe01] must-pass = 1 -[pipe04] -skip = yes - -[pipe05] -skip = yes - [pipe09] skip = yes -[pipe10] -skip = yes - -[pipe11] -skip = yes - -[pipe2_01] -skip = yes - [prctl02] skip = yes @@ -467,38 +264,18 @@ timeout = 60 timeout = 60 [pread02_64] -skip = yes +timeout = 60 [preadv01] skip = yes timeout = 80 -# WORKAROUND: test passes but TWARNs on cleanup of temp dir; bug in Graphene -[pselect02] -must-pass = - 1 - 2 - 3 - -# WORKAROUND: test passes but TWARNs on cleanup of temp dir; bug in Graphene -[pselect02_64] -must-pass = - 1 - 2 - 3 - [pwrite01] -skip = yes +timeout = 60 [pwrite01_64] timeout = 60 -[pwrite02] -skip = yes - -[pwrite02_64] -skip = yes - [pwrite04_64] timeout = 60 must-pass = @@ -511,9 +288,6 @@ timeout = 60 [read01] timeout = 60 -[read04] -skip = yes - [readdir01] timeout = 60 @@ -524,72 +298,28 @@ timeout = 60 must-pass = 1 -[recv01] -skip = yes - -[recvfrom01] -skip = yes - -[recvmsg01] -skip = yes - [recvmsg03] skip = yes -[rmdir01] -skip = yes - -[rt_sigaction01] -skip = yes - -[rt_sigaction02] -skip = yes - -[rt_sigaction03] -skip = yes - -[rt_sigprocmask01] -skip = yes - -[rt_sigsuspend01] -skip = yes - -[sbrk01] -skip = yes - -[sbrk02] -skip = yes - [sched_getaffinity01] skip = yes -[sched_yield01] +[select04] skip = yes -# WORKAROUND: test passes but TWARNs on cleanup of temp dir; bug in Graphene -[select01] -must-pass = - 1 - [semctl01] skip = yes [semget02] skip = yes -[semget03] -skip = yes - -[semop01] -skip = yes - [send01] must-pass = 1 2 [sendfile03] -skip = yes +timeout = 60 [sendfile03_64] timeout = 60 @@ -600,63 +330,21 @@ skip = yes [sendfile05_64] skip = yes -[sendto01] -skip = yes - -[sendto02] -skip = yes - -[set_tid_address01] -skip = yes - -[setdomainname01] -skip = yes - -[setdomainname02] -skip = yes - [setdomainname03] skip = yes -[setgid01] -skip = yes - -[setgroups01] -skip = yes - [setgroups02] skip = yes -[sethostname01] -skip = yes - -[sethostname02] -skip = yes - [sethostname03] skip = yes -[setitimer01] -skip = yes - -[setpgid01] -skip = yes - -[setpgrp01] -skip = yes - -[setpgrp02] -skip = yes - [setrlimit01] skip = yes [setrlimit02] skip = yes -[setrlimit03] -skip = yes - [setrlimit05] skip = yes @@ -670,52 +358,26 @@ must-pass = 7 8 -[setsockopt03] -skip = yes - [setuid01] timeout = 60 -[sigaction02] -skip = yes - [sigaltstack01] -skip = yes +timeout = 60 [sigaltstack02] timeout = 60 -[signal02] -skip = yes - -[signal03] -skip = yes - -[signal04] -skip = yes - -[signal05] -skip = yes - [signal06] skip = yes -[sigpending02] -skip = yes - -[sigprocmask01] -skip = yes - -[sigsuspend01] +[sigrelse01] skip = yes [socket01] timeout = 60 -skip = yes [socket02] timeout = 60 -skip = yes [socketcall02] skip = yes @@ -723,15 +385,8 @@ skip = yes [socketcall03] skip = yes -[socketpair01] -skip = yes - -[socketpair02] -skip = yes - [sockioctl01] timeout = 60 -skip = yes [stat01] skip = yes @@ -739,89 +394,26 @@ skip = yes [stat01_64] skip = yes -[string01] -skip = yes - -[sync01] -timeout = 60 - -[sync02] -skip = yes - [syscall01] timeout = 80 -skip = yes - -[sysconf01] -skip = yes [tgkill01] skip = yes -[time01] -skip = yes - -[time02] -skip = yes - -[times01] -skip = yes - -[tkill01] -skip = yes - -[truncate01] -skip = yes - -[truncate01_64] -skip = yes - -[ulimit01] -skip = yes - -[uname01] -skip = yes - -[uname02] -skip = yes - -[uname03] -skip = yes - -[uname04] -skip = yes - -[unlinkat01] -skip = yes - [vfork02] timeout = 60 -[wait01] -skip = yes - -[wait02] -skip = yes - [wait401] timeout = 60 -skip = yes [wait402] skip = yes -[waitpid01] -skip = yes - -[waitpid02] -skip = yes +[waitpid03] +timeout = 75 [waitpid05] timeout = 240 -skip = yes - -[write01] -skip = yes [write03] timeout = 60 @@ -831,7 +423,10 @@ skip = yes timeout = 60 skip = yes -[writev01] +[writev02] +skip = yes + +[writev05] skip = yes [writev06] diff --git a/LibOS/shim/test/ltp/ltp.cfg b/LibOS/shim/test/ltp/ltp.cfg index 82c4eab38e..1d07322a00 100644 --- a/LibOS/shim/test/ltp/ltp.cfg +++ b/LibOS/shim/test/ltp/ltp.cfg @@ -1908,12 +1908,6 @@ skip = yes [sched_getattr02] skip = yes -[sched_getparam01] -skip = yes - -[sched_getparam02] -skip = yes - [sched_getparam03] skip = yes @@ -1923,9 +1917,6 @@ skip = yes [sched_getscheduler02] skip = yes -[sched_rr_get_interval01] -skip = yes - [sched_rr_get_interval02] skip = yes @@ -1938,9 +1929,6 @@ skip = yes [sched_setattr01] skip = yes -[sched_setparam01] -skip = yes - [sched_setparam02] skip = yes @@ -1982,9 +1970,6 @@ skip = yes [semctl05] skip = yes -[semctl06] -skip = yes - [semctl07] skip = yes diff --git a/LibOS/shim/test/ltp/ltp_sgx_mmap_fix.patch b/LibOS/shim/test/ltp/ltp_sgx_mmap_fix.patch new file mode 100644 index 0000000000..73613cff56 --- /dev/null +++ b/LibOS/shim/test/ltp/ltp_sgx_mmap_fix.patch @@ -0,0 +1,17 @@ +To run LTP tests with SGX (which doesn't support shared memory mappings), +as a workaround we change the mmap flag from MAP_SHARED to MAP_PRIVATE +(unintuitively, the LTP framework still works correctly with this change) + +diff --git a/src/lib/tst_test.c b//src/lib/tst_test.c +index 535c0ff4..b53a0daa 100644 +--- a/src/lib/tst_test.c ++++ b/src/lib/tst_test.c +@@ -105,7 +105,7 @@ static void setup_ipc(void) + + SAFE_FTRUNCATE(ipc_fd, size); + +- results = SAFE_MMAP(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, ipc_fd, 0); ++ results = SAFE_MMAP(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, ipc_fd, 0); + + /* Checkpoints needs to be accessible from processes started by exec() */ + if (tst_test->needs_checkpoints || tst_test->child_needs_reinit) { diff --git a/LibOS/shim/test/ltp/makevars.mk b/LibOS/shim/test/ltp/makevars.mk index 74b1a138a8..c5a9acc8ea 100644 --- a/LibOS/shim/test/ltp/makevars.mk +++ b/LibOS/shim/test/ltp/makevars.mk @@ -1,9 +1,14 @@ # Everything here must be absolute because other Makefiles assume this. ROOTDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - SRCDIR = $(ROOTDIR)/src BUILDDIR = $(ROOTDIR)/build INSTALLDIR = $(ROOTDIR)/install +LTPROOT = install +RUNLTPOPTS = +ifeq ($(SGX),1) + BUILDDIR:=$(BUILDDIR)-sgx + INSTALLDIR:=$(INSTALLDIR)-sgx + LTPROOT = install-sgx +endif TESTCASEDIR = $(INSTALLDIR)/testcases/bin LTPSCENARIO = $(INSTALLDIR)/runtest/syscalls -RUNLTPOPTS =