Browse Source

fix a bug in allocating enclave pages. another bug in waking enclave threads

Chia-Che Tsai 7 years ago
parent
commit
3cf3bd2df3

+ 1 - 1
LibOS/.packed/glibc.sha384

@@ -1 +1 @@
-glibc-build/crt1.o glibc-build/crti.o glibc-build/crtn.o glibc-build/ld-linux-x86-64.so.2 glibc-build/libc.so.6 glibc-build/libdl.so.2 glibc-build/liblibos.so.1 glibc-build/libm.so.6 glibc-build/libpthread.so.0 glibc-build/libutil.so.1
+glibc-build/crt1.o glibc-build/crti.o glibc-build/crtn.o glibc-build/ld-linux-x86-64.so.2 glibc-build/libc.so.6 glibc-build/libdl.so.2 glibc-build/liblibos.so.1 glibc-build/libm.so.6 glibc-build/libnss_dns.so.2 glibc-build/libpthread.so.0 glibc-build/libresolv.so.2 glibc-build/libutil.so.1

BIN
LibOS/.packed/glibc.tar.gz


File diff suppressed because it is too large
+ 0 - 0
LibOS/shim/src/.packed/shim.sha384


BIN
LibOS/shim/src/.packed/shim.tar.gz


+ 7 - 1
LibOS/shim/test/apps/openjdk/Makefile

@@ -11,8 +11,14 @@ clean-extra = clean-classes
 
 JAVA_HOST_HOME = $(shell readlink -f /usr/bin/java | xargs dirname | xargs dirname)
 
+compact_rule = sys.stack.size = 1M\nsys.brk.size = 16M\nglibc.heap_size = 4M\nsgx.enclave_size = 4G\nsgx.thread_num = 16\nsgx.heap_min = 0x80000000
+large_rule = sys.stack.size = 4M\nsys.brk.size = 64M\nglibc.heap_size = 16M\nsgx.enclave_size = 8G\nsgx.thread_num = 32\nsgx.heap_min = 0x40000000
+
 ABSPATH_IN_MANIFEST = yes
-extra_rules = -e 's:\$$(JAVA_HOME):$(JAVA_HOST_HOME):g'
+extra_rules = \
+	-e 's:\$$(DEBUGTYPE):$(if $(DEBUG),inline,none):g' \
+	-e 's:\$$(JAVA_HOME):$(JAVA_HOST_HOME):g' \
+	-e 's:\$$(RESOURCE_RULE):$(if $(COMPACT),$(compact_rule),$(large_rule)):g'
 
 level = ../../
 include ../../Makefile

+ 2 - 8
LibOS/shim/test/apps/openjdk/java.manifest.template

@@ -5,7 +5,7 @@ loader.exec = file:$(JAVA_HOME)/bin/java
 loader.execname = java
 loader.env.LD_LIBRARY_PATH = $(JAVA_HOME)/lib/amd64:$(JAVA_HOME)/lib/amd64/jli:/graphene:/lib/x86_64-linux-gnu:/usr/lib:/usr/lib/x86_64-linux-gnu
 loader.env.PATH = /jre/bin:/bin:/usr/bin
-loader.debug_type = none
+loader.debug_type = $(DEBUGTYPE)
 
 fs.mount.lib1.type = chroot
 fs.mount.lib1.path = /graphene
@@ -27,13 +27,7 @@ fs.mount.tmp.type = chroot
 fs.mount.tmp.path = /tmp
 fs.mount.tmp.uri = file:/tmp
 
-sys.stack.size = 1M
-sys.brk.size = 16M
-glibc.heap_size = 4M
-
-sgx.enclave_size = 8G
-sgx.thread_num = 40
-sgx.heap_min = 0x80000000
+$(RESOURCE_RULE)
 
 sgx.trusted_files.ld = file:$(LIBCDIR)/ld-linux-x86-64.so.2
 sgx.trusted_files.libc = file:$(LIBCDIR)/libc.so.6

+ 0 - 0
LibOS/shim/test/apps/openjdk/run-java → LibOS/shim/test/apps/openjdk/run-compact-java


+ 1 - 1
Pal/regression/.packed/test.sha384

@@ -1 +1 @@
-Bootstrap Bootstrap2 Bootstrap3 Directory Exception File Ipc Memory Misc Pipe Preload1.so Preload2.so Process Process2 Process3 SendHandle Socket Symbols Thread da9eddeb36c6f24f4fbebb7f94c198b81fe757849556080cda2c40cbbeadf4cd86e72533983cda9fc0af34f65ce75d16
+Bootstrap ..Bootstrap Bootstrap2 Bootstrap3 Directory Exception File Ipc Memory Misc Pipe Preload1.so Preload2.so Process Process2 Process3 Semaphore SendHandle Socket Symbols Thread 5851656aa1965a98de2be10613e5bddfb52659eb2fad51a0d1cac35b7b38110765dea769c5bc5b90d3933661794744c0

BIN
Pal/regression/.packed/test.tar.gz


+ 1 - 1
Pal/src/host/Linux-SGX/db_memory.c

@@ -86,7 +86,7 @@ int _DkVirtualMemoryAlloc (void ** paddr, uint64_t size, int alloc_type, int pro
     if (!mem)
         return addr ? -PAL_ERROR_DENIED : -PAL_ERROR_NOMEM;
 
-    memset(mem, 0, size);
+    //memset(mem, 0, size);
 
     if (alloc_type & PAL_ALLOC_INTERNAL) {
         SGX_DBG(DBG_M, "pal allocates %p-%p for internal use\n", mem, mem + size);

+ 5 - 3
Pal/src/host/Linux-SGX/enclave_pages.c

@@ -105,7 +105,9 @@ void * get_reserved_pages(void * addr, uint64_t size)
     void * avail_top = heap_base + heap_size;
 
     list_for_each_entry(vma, &heap_vma_list, list) {
-        if (avail_top - vma->top > size) {
+        if (vma->top < heap_base)
+            break;
+        if (avail_top >= vma->top + size) {
             addr = avail_top - size;
             goto allocated;
         }
@@ -113,15 +115,15 @@ void * get_reserved_pages(void * addr, uint64_t size)
         avail_top = prev->bottom;
     }
 
-    if (avail_top - heap_base > size) {
+    if (avail_top >= heap_base + size) {
         addr = avail_top - size;
         goto allocated;
     }
 
     _DkInternalUnlock(&heap_vma_lock);
 
-    asm volatile("int $3");
     SGX_DBG(DBG_E, "*** Not enough space on the heap (requested = %llu) ***\n", size);
+    asm volatile("int $3");
     return NULL;
 
 allocated:

+ 1 - 1
Pal/src/host/Linux-SGX/sgx_thread.c

@@ -85,7 +85,7 @@ int clone_thread (void)
 
 int interrupt_thread (void * tcs)
 {
-    int index = current_tcs - enclave_tcs;
+    int index = (sgx_arch_tcs_t *) tcs - enclave_tcs;
     struct thread_map * map = &enclave_thread_map[index];
     if (index >= enclave_thread_num)
         return -PAL_ERROR_INVAL;

+ 1 - 0
Runtime/Makefile

@@ -2,3 +2,4 @@ clean:
 	rm -f libc.so.6 ld-linux-x86-64.so.2 libpthread.so.0 libm.so.6 libdl.so.2 libutil.so.1 crt1.o crti.o crtn.o liblibos.so.1 libnss_dns.so.2 libresolv.so.2 pal_gdb* pal-* pal_sec*
 
 all:
+pack:

+ 4 - 2
Runtime/pal_loader

@@ -1,8 +1,10 @@
 #!/bin/bash
 
 if [ "$1" == "SGX" ]; then
-    export SGX=1
-    shift
+	if [ "$SGX" != "0" ]; then
+		export SGX=1
+	fi
+	shift
 fi
 
 RUNTIME_DIR=$(/usr/bin/dirname $(readlink -f ${BASH_SOURCE[0]}))

Some files were not shown because too many files changed in this diff