@@ -174,6 +174,7 @@ uint64_t encl_get_entry(struct encl *encl, const char *symbol)
bool encl_load(const char *path, struct encl *encl, unsigned long heap_size)
{
const char device_path[] = "/dev/sgx_enclave";
+ unsigned long contents_size;
struct encl_segment *seg;
Elf64_Phdr *phdr_tbl;
off_t src_offset;
@@ -298,9 +299,9 @@ bool encl_load(const char *path, struct encl *encl, unsigned long heap_size)
if (seg->src == MAP_FAILED)
goto err;
- encl->src_size = encl->segment_tbl[j].offset + encl->segment_tbl[j].size;
+ contents_size = encl->segment_tbl[j].offset + encl->segment_tbl[j].size;
- for (encl->encl_size = 4096; encl->encl_size < encl->src_size; )
+ for (encl->encl_size = 4096; encl->encl_size < contents_size; )
encl->encl_size <<= 1;
return true;
@@ -20,7 +20,6 @@ struct encl {
void *bin;
off_t bin_size;
void *src;
- size_t src_size;
size_t encl_size;
off_t encl_base;
unsigned int nr_segments;
@@ -218,13 +218,9 @@ struct mrecreate {
} __attribute__((__packed__));
-static bool mrenclave_ecreate(EVP_MD_CTX *ctx, uint64_t blob_size)
+static bool mrenclave_ecreate(EVP_MD_CTX *ctx, uint64_t encl_size)
{
struct mrecreate mrecreate;
- uint64_t encl_size;
-
- for (encl_size = 0x1000; encl_size < blob_size; )
- encl_size <<= 1;
memset(&mrecreate, 0, sizeof(mrecreate));
mrecreate.tag = MRECREATE;
@@ -349,7 +345,7 @@ bool encl_measure(struct encl *encl)
if (!ctx)
goto err;
- if (!mrenclave_ecreate(ctx, encl->src_size))
+ if (!mrenclave_ecreate(ctx, encl->encl_size))
goto err;
for (i = 0; i < encl->nr_segments; i++) {
The final enclave address range (referred as ELRANGE in Intel SDM) calculation is a reminiscent of signing tool being a separate command-line utility, and sigstruct being produced during the compilation. Given that nowadays the sigstruct is calculated on-fly, use the readily calculated encl->encl_size instead, in order to remove duplicate code. Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> --- tools/testing/selftests/sgx/load.c | 5 +++-- tools/testing/selftests/sgx/main.h | 1 - tools/testing/selftests/sgx/sigstruct.c | 8 ++------ 3 files changed, 5 insertions(+), 9 deletions(-)