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: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Acked-by: Dave Hansen <dave.hansen@linux.intel.com> Link: https://lkml.kernel.org/r/bee0ca867a95828a569c1ba2a8e443a44047dc71.1636997631.git.reinette.chatre@intel.com
This commit is contained in:
parent
1471721489
commit
1b35eb7195
@ -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)
|
|||||||
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)
|
|||||||
|
|
||||||
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 @@ err:
|
|||||||
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user