瀏覽代碼

[Pal/Linux-SGX] Ensure that ocall_exit never returns

There are two cases to cover:

 1. The ocall gets interuppted before the outside calls exit.
 2. The outside might try to trick the enclave.
Simon Gaiser 6 年之前
父節點
當前提交
5a6e2fddca
共有 1 個文件被更改,包括 7 次插入2 次删除
  1. 7 2
      Pal/src/host/Linux-SGX/enclave_ocalls.c

+ 7 - 2
Pal/src/host/Linux-SGX/enclave_ocalls.c

@@ -67,8 +67,13 @@ int printf(const char * fmt, ...);
 int ocall_exit(int exitcode)
 {
     int64_t code = exitcode;
-    SGX_OCALL(OCALL_EXIT, (void *) code);
-    /* never reach here */
+    // There are two reasons for this loop:
+    //  1. Ocalls can be interuppted.
+    //  2. We can't trust the outside to actually exit, so we need to ensure
+    //     that we never return even when the outside tries to trick us.
+    while (true) {
+        SGX_OCALL(OCALL_EXIT, (void *) code);
+    }
     return 0;
 }