Skip to content

Commit 2eed93a

Browse files
JunjunGu1lzha101
authored andcommitted
fix the issue that s_enclave_elrange_map destructor is invalid
which is reported from #818 Signed-off-by: junjungu <junjun.gu@intel.com>
1 parent 508b5ee commit 2eed93a

File tree

2 files changed

+16
-65
lines changed

2 files changed

+16
-65
lines changed

psw/enclave_common/sgx_enclave_common.cpp

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ static std::map<void*, int> s_hfile; //enclave file handles for drive
7575
static std::map<void*, size_t> s_enclave_size;
7676
static std::map<void*, bool> s_enclave_init;
7777
static std::map<void*, sgx_attributes_t> s_secs_attr;
78-
static std::map<void *, enclave_elrange_t*>s_enclave_elrange_map;
78+
static std::map<void *, enclave_elrange_t>s_enclave_elrange_map;
7979

8080
typedef struct _mem_region_t {
8181
void* addr;
@@ -177,9 +177,9 @@ static bool get_elrange_from_base_address(void* base_address, enclave_elrange_t*
177177
{
178178
if(enclave_elrange != NULL)
179179
{
180-
enclave_elrange->elrange_size = s_enclave_elrange_map[base_address]->elrange_size;
181-
enclave_elrange->elrange_start_address = s_enclave_elrange_map[base_address]->elrange_start_address;
182-
enclave_elrange->enclave_image_address = s_enclave_elrange_map[base_address]->enclave_image_address;
180+
enclave_elrange->elrange_size = s_enclave_elrange_map[base_address].elrange_size;
181+
enclave_elrange->elrange_start_address = s_enclave_elrange_map[base_address].elrange_start_address;
182+
enclave_elrange->enclave_image_address = s_enclave_elrange_map[base_address].enclave_image_address;
183183
}
184184
return true;
185185
}
@@ -235,20 +235,10 @@ static void close_sofile(void)
235235
}
236236

237237

238-
static void release_enclave_elrange_map()
239-
{
240-
for (auto &res:s_enclave_elrange_map)
241-
{
242-
auto elrange = res.second;
243-
delete elrange;
244-
elrange = NULL;
245-
}
246-
}
247238
static void __attribute__((destructor)) enclave_fini(void)
248239
{
249240
close_device();
250241
close_sofile();
251-
release_enclave_elrange_map();
252242
}
253243

254244
static uint32_t error_driver2api(int driver_error, int err_no)
@@ -788,24 +778,9 @@ extern "C" void* COMM_API enclave_create_ex(
788778
s_enclave_mem_region[enclave_base].prot = 0;
789779
if(enclave_elrange != NULL)
790780
{
791-
enclave_elrange_t *tmp_enclave_elrange = new(std::nothrow) enclave_elrange_t;
792-
if (tmp_enclave_elrange == NULL)
793-
{
794-
if (enclave_error)
795-
{
796-
*enclave_error = ENCLAVE_OUT_OF_MEMORY;
797-
}
798-
799-
//if in-kernel driver then close the file handle
800-
if (s_driver_type == SGX_DRIVER_IN_KERNEL)
801-
{
802-
close_file(&hdevice_temp);
803-
}
804-
munmap(enclave_base, virtual_size);
805-
return NULL;
806-
}
807-
memset(tmp_enclave_elrange, 0, sizeof(enclave_elrange_t));
808-
if (memcpy_s(tmp_enclave_elrange, sizeof(enclave_elrange_t), enclave_elrange, sizeof(enclave_elrange_t)))
781+
enclave_elrange_t tmp_enclave_elrange;
782+
memset(&tmp_enclave_elrange, 0, sizeof(enclave_elrange_t));
783+
if (memcpy_s(&tmp_enclave_elrange, sizeof(enclave_elrange_t), enclave_elrange, sizeof(enclave_elrange_t)))
809784
{
810785
if (enclave_error)
811786
{
@@ -1285,13 +1260,7 @@ extern "C" bool COMM_API enclave_delete(
12851260

12861261
if(s_enclave_elrange_map.count(base_address) != 0)
12871262
{
1288-
enclave_elrange_t *enclave_elrange = s_enclave_elrange_map[base_address];
1289-
if (enclave_elrange != NULL)
1290-
{
1291-
s_enclave_elrange_map.erase(base_address);
1292-
delete enclave_elrange;
1293-
enclave_elrange = NULL;
1294-
}
1263+
s_enclave_elrange_map.erase(base_address);
12951264
}
12961265
}
12971266

sdk/simulation/urtssim/enclave_creator_sim.cpp

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -75,26 +75,16 @@ static void cleanup_openssl(void)
7575

7676

7777
static Mutex s_enclave_info_mutex;
78-
static std::map<void *, enclave_elrange_t*>s_enclave_elrange_map;
78+
static std::map<void *, enclave_elrange_t>s_enclave_elrange_map;
7979

80-
__attribute__((destructor))
81-
static void enclave_elrange_cleanup(void)
82-
{
83-
for (auto &res:s_enclave_elrange_map)
84-
{
85-
auto elrange = res.second;
86-
delete elrange;
87-
elrange = NULL;
88-
}
89-
}
9080

9181
extern "C" bool get_elrange_start_address(void* base_address, uint64_t &elrange_start_address)
9282
{
9383
LockGuard lock(&s_enclave_info_mutex);
9484
bool ret = false;
9585
if(s_enclave_elrange_map.count(base_address) != 0)
9686
{
97-
elrange_start_address = s_enclave_elrange_map[base_address]->elrange_start_address;
87+
elrange_start_address = s_enclave_elrange_map[base_address].elrange_start_address;
9888
ret = true;
9989
}
10090
return ret;
@@ -118,30 +108,22 @@ int EnclaveCreatorSim::create_enclave(secs_t *secs, sgx_enclave_id_t *enclave_id
118108
LockGuard lock(&s_enclave_info_mutex);
119109
if (s_enclave_elrange_map.count(base_address) != 0)
120110
{
121-
enclave_elrange_t *enclave_elrange = s_enclave_elrange_map[base_address];
122-
if (enclave_elrange == NULL)
123-
{
124-
return SGX_ERROR_UNEXPECTED;
125-
}
111+
enclave_elrange_t enclave_elrange = s_enclave_elrange_map[base_address];
126112

127-
if (memcpy_s(enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t)))
113+
if (memcpy_s(&enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t)))
128114
{
129115
return SGX_ERROR_UNEXPECTED;
130116
}
131117
}
132118
else
133119
{
134-
enclave_elrange_t *enclave_elrange = new(std::nothrow) enclave_elrange_t;
135-
if (enclave_elrange == NULL)
136-
{
137-
return SGX_ERROR_OUT_OF_MEMORY;
138-
}
139-
memset(enclave_elrange, 0, sizeof(enclave_elrange_t));
140-
if (memcpy_s(enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t)))
120+
enclave_elrange_t enclave_elrange;
121+
memset(&enclave_elrange, 0, sizeof(enclave_elrange_t));
122+
if (memcpy_s(&enclave_elrange, sizeof(enclave_elrange_t), tmp_enclave_elrange, sizeof(enclave_elrange_t)))
141123
{
142124
return SGX_ERROR_UNEXPECTED;
143125
}
144-
s_enclave_elrange_map[base_address] = enclave_elrange;
126+
s_enclave_elrange_map[base_address] = enclave_elrange;
145127
}
146128
}
147129
return ::create_enclave(secs, enclave_id, start_addr);

0 commit comments

Comments
 (0)