From 84b6d820adfa52933ddbfc8811660ba74a8fa602 Mon Sep 17 00:00:00 2001 From: "YiLin.Li" Date: Mon, 17 Aug 2020 18:19:18 +0000 Subject: [PATCH] rune/libenclave/skeleton: Support OOT driver in PAL API V2 Signed-off-by: Yilin Li --- .../runtime/pal/skeleton/liberpal-skeleton-v2.c | 5 ----- .../runtime/pal/skeleton/liberpal-skeleton.c | 13 +++++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton-v2.c b/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton-v2.c index c6a7847..dc39e8c 100644 --- a/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton-v2.c +++ b/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton-v2.c @@ -13,11 +13,6 @@ int pal_get_version(void) int pal_init(pal_attr_t *attr) { - if (is_oot_driver) { - fprintf(stderr, "Skeleton PAL API v2 doesn't support SGX OOT driver!\n"); - return -1; - } - return __pal_init(attr); } diff --git a/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton.c b/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton.c index ce0a531..ea0e7e1 100644 --- a/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton.c +++ b/rune/libenclave/internal/runtime/pal/skeleton/liberpal-skeleton.c @@ -35,6 +35,7 @@ static struct sgx_secs secs; static pal_stdio_fds pal_stdio; static bool initialized = false; +static int exit_code; static char *sgx_dev_path; static bool no_sgx_flc = false; static bool enclave_debug = true; @@ -486,6 +487,13 @@ int __pal_create_process(pal_create_process_args *args) return -1; } + /* SGX out-of-tree driver disallows the creation of shared enclave mapping + * between parent and child process, so simply launching __pal_exec() directly here. + */ + if (is_oot_driver) { + return __pal_exec(args->path, args->argv, args->stdio, &exit_code); + } + FILE *fp = fdopen(args->stdio->stderr, "w"); if (!fp) return -1; @@ -524,6 +532,11 @@ int wait4child(pal_exec_args *attr) return -1; } + if (is_oot_driver) { + *attr->exit_value = exit_code; + return exit_code; + } + waitpid(attr->pid, &status, 0); if (WIFEXITED(status) || WIFSIGNALED(status)) -- GitLab