Commit 1b35eb71 authored by Jarkko Sakkinen's avatar Jarkko Sakkinen Committed by Dave Hansen

selftests/sgx: Encpsulate the test enclave creation

Introduce setup_test_encl() so that the enclave creation can be moved to
TEST_F()'s. This is required for a reclaimer test where the heap size needs
to be set large enough to triger the page reclaimer.
Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
Acked-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
Link: https://lkml.kernel.org/r/bee0ca867a95828a569c1ba2a8e443a44047dc71.1636997631.git.reinette.chatre@intel.com
parent 14717214
...@@ -112,7 +112,8 @@ FIXTURE(enclave) { ...@@ -112,7 +112,8 @@ FIXTURE(enclave) {
struct sgx_enclave_run run; struct sgx_enclave_run run;
}; };
FIXTURE_SETUP(enclave) static bool setup_test_encl(unsigned long heap_size, struct encl *encl,
struct __test_metadata *_metadata)
{ {
Elf64_Sym *sgx_enter_enclave_sym = NULL; Elf64_Sym *sgx_enter_enclave_sym = NULL;
struct vdso_symtab symtab; struct vdso_symtab symtab;
...@@ -122,25 +123,25 @@ FIXTURE_SETUP(enclave) ...@@ -122,25 +123,25 @@ FIXTURE_SETUP(enclave)
unsigned int i; unsigned int i;
void *addr; void *addr;
if (!encl_load("test_encl.elf", &self->encl, ENCL_HEAP_SIZE_DEFAULT)) { if (!encl_load("test_encl.elf", encl, heap_size)) {
encl_delete(&self->encl); encl_delete(encl);
ksft_exit_skip("cannot load enclaves\n"); TH_LOG("Failed to load the test enclave.\n");
} }
if (!encl_measure(&self->encl)) if (!encl_measure(encl))
goto err; goto err;
if (!encl_build(&self->encl)) if (!encl_build(encl))
goto err; goto err;
/* /*
* An enclave consumer only must do this. * An enclave consumer only must do this.
*/ */
for (i = 0; i < self->encl.nr_segments; i++) { for (i = 0; i < encl->nr_segments; i++) {
struct encl_segment *seg = &self->encl.segment_tbl[i]; struct encl_segment *seg = &encl->segment_tbl[i];
addr = mmap((void *)self->encl.encl_base + seg->offset, seg->size, addr = mmap((void *)encl->encl_base + seg->offset, seg->size,
seg->prot, MAP_SHARED | MAP_FIXED, self->encl.fd, 0); seg->prot, MAP_SHARED | MAP_FIXED, encl->fd, 0);
EXPECT_NE(addr, MAP_FAILED); EXPECT_NE(addr, MAP_FAILED);
if (addr == MAP_FAILED) if (addr == MAP_FAILED)
goto err; goto err;
...@@ -160,16 +161,13 @@ FIXTURE_SETUP(enclave) ...@@ -160,16 +161,13 @@ FIXTURE_SETUP(enclave)
vdso_sgx_enter_enclave = addr + sgx_enter_enclave_sym->st_value; vdso_sgx_enter_enclave = addr + sgx_enter_enclave_sym->st_value;
memset(&self->run, 0, sizeof(self->run)); return true;
self->run.tcs = self->encl.encl_base;
return;
err: err:
encl_delete(&self->encl); encl_delete(encl);
for (i = 0; i < self->encl.nr_segments; i++) { for (i = 0; i < encl->nr_segments; i++) {
seg = &self->encl.segment_tbl[i]; seg = &encl->segment_tbl[i];
TH_LOG("0x%016lx 0x%016lx 0x%02x", seg->offset, seg->size, seg->prot); TH_LOG("0x%016lx 0x%016lx 0x%02x", seg->offset, seg->size, seg->prot);
} }
...@@ -186,7 +184,17 @@ FIXTURE_SETUP(enclave) ...@@ -186,7 +184,17 @@ FIXTURE_SETUP(enclave)
fclose(maps_file); fclose(maps_file);
} }
ASSERT_TRUE(false); TH_LOG("Failed to initialize the test enclave.\n");
return false;
}
FIXTURE_SETUP(enclave)
{
ASSERT_TRUE(setup_test_encl(ENCL_HEAP_SIZE_DEFAULT, &self->encl, _metadata));
memset(&self->run, 0, sizeof(self->run));
self->run.tcs = self->encl.encl_base;
} }
FIXTURE_TEARDOWN(enclave) FIXTURE_TEARDOWN(enclave)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment