diff --git a/psw/enclave_common/sgx_enclave_common.cpp b/psw/enclave_common/sgx_enclave_common.cpp index b5aaa81e5..20b8d12fa 100644 --- a/psw/enclave_common/sgx_enclave_common.cpp +++ b/psw/enclave_common/sgx_enclave_common.cpp @@ -75,7 +75,7 @@ static std::map s_hfile; //enclave file handles for drive static std::map s_enclave_size; static std::map s_enclave_init; static std::map s_secs_attr; -static std::maps_enclave_elrange_map; +static std::maps_enclave_elrange_map; typedef struct _mem_region_t { void* addr; @@ -177,9 +177,9 @@ static bool get_elrange_from_base_address(void* base_address, enclave_elrange_t* { if(enclave_elrange != NULL) { - enclave_elrange->elrange_size = s_enclave_elrange_map[base_address]->elrange_size; - enclave_elrange->elrange_start_address = s_enclave_elrange_map[base_address]->elrange_start_address; - enclave_elrange->enclave_image_address = s_enclave_elrange_map[base_address]->enclave_image_address; + enclave_elrange->elrange_size = s_enclave_elrange_map[base_address].elrange_size; + enclave_elrange->elrange_start_address = s_enclave_elrange_map[base_address].elrange_start_address; + enclave_elrange->enclave_image_address = s_enclave_elrange_map[base_address].enclave_image_address; } return true; } @@ -235,20 +235,10 @@ static void close_sofile(void) } -static void release_enclave_elrange_map() -{ - for (auto &res:s_enclave_elrange_map) - { - auto elrange = res.second; - delete elrange; - elrange = NULL; - } -} static void __attribute__((destructor)) enclave_fini(void) { close_device(); close_sofile(); - release_enclave_elrange_map(); } static uint32_t error_driver2api(int driver_error, int err_no) @@ -788,24 +778,9 @@ extern "C" void* COMM_API enclave_create_ex( s_enclave_mem_region[enclave_base].prot = 0; if(enclave_elrange != NULL) { - enclave_elrange_t *tmp_enclave_elrange = new(std::nothrow) enclave_elrange_t; - if (tmp_enclave_elrange == NULL) - { - if (enclave_error) - { - *enclave_error = ENCLAVE_OUT_OF_MEMORY; - } - - //if in-kernel driver then close the file handle - if (s_driver_type == SGX_DRIVER_IN_KERNEL) - { - close_file(&hdevice_temp); - } - munmap(enclave_base, virtual_size); - return NULL; - } - memset(tmp_enclave_elrange, 0, sizeof(enclave_elrange_t)); - if (memcpy_s(tmp_enclave_elrange, sizeof(enclave_elrange_t), enclave_elrange, sizeof(enclave_elrange_t))) + enclave_elrange_t tmp_enclave_elrange; + memset(&tmp_enclave_elrange, 0, sizeof(enclave_elrange_t)); + if (memcpy_s(&tmp_enclave_elrange, sizeof(enclave_elrange_t), enclave_elrange, sizeof(enclave_elrange_t))) { if (enclave_error) { @@ -1285,13 +1260,7 @@ extern "C" bool COMM_API enclave_delete( if(s_enclave_elrange_map.count(base_address) != 0) { - enclave_elrange_t *enclave_elrange = s_enclave_elrange_map[base_address]; - if (enclave_elrange != NULL) - { - s_enclave_elrange_map.erase(base_address); - delete enclave_elrange; - enclave_elrange = NULL; - } + s_enclave_elrange_map.erase(base_address); } } diff --git a/sdk/simulation/urtssim/enclave_creator_sim.cpp b/sdk/simulation/urtssim/enclave_creator_sim.cpp index 64b9e0e86..8ed7f17ec 100644 --- a/sdk/simulation/urtssim/enclave_creator_sim.cpp +++ b/sdk/simulation/urtssim/enclave_creator_sim.cpp @@ -75,18 +75,8 @@ static void cleanup_openssl(void) static Mutex s_enclave_info_mutex; -static std::maps_enclave_elrange_map; +static std::maps_enclave_elrange_map; -__attribute__((destructor)) -static void enclave_elrange_cleanup(void) -{ - for (auto &res:s_enclave_elrange_map) - { - auto elrange = res.second; - delete elrange; - elrange = NULL; - } -} extern "C" bool get_elrange_start_address(void* base_address, uint64_t &elrange_start_address) { @@ -94,7 +84,7 @@ extern "C" bool get_elrange_start_address(void* base_address, uint64_t &elrange_ bool ret = false; if(s_enclave_elrange_map.count(base_address) != 0) { - elrange_start_address = s_enclave_elrange_map[base_address]->elrange_start_address; + elrange_start_address = s_enclave_elrange_map[base_address].elrange_start_address; ret = true; } return ret; @@ -118,30 +108,22 @@ int EnclaveCreatorSim::create_enclave(secs_t *secs, sgx_enclave_id_t *enclave_id LockGuard lock(&s_enclave_info_mutex); if (s_enclave_elrange_map.count(base_address) != 0) { - enclave_elrange_t *enclave_elrange = s_enclave_elrange_map[base_address]; - if (enclave_elrange == NULL) - { - return SGX_ERROR_UNEXPECTED; - } + enclave_elrange_t enclave_elrange = s_enclave_elrange_map[base_address]; - if (memcpy_s(enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t))) + if (memcpy_s(&enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t))) { return SGX_ERROR_UNEXPECTED; } } else { - enclave_elrange_t *enclave_elrange = new(std::nothrow) enclave_elrange_t; - if (enclave_elrange == NULL) - { - return SGX_ERROR_OUT_OF_MEMORY; - } - memset(enclave_elrange, 0, sizeof(enclave_elrange_t)); - if (memcpy_s(enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t))) + enclave_elrange_t enclave_elrange; + memset(&enclave_elrange, 0, sizeof(enclave_elrange_t)); + if (memcpy_s(&enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t))) { return SGX_ERROR_UNEXPECTED; } - s_enclave_elrange_map[base_address] = enclave_elrange; + s_enclave_elrange_map[base_address] = enclave_elrange; } } return ::create_enclave(secs, enclave_id, start_addr);