Add more security checks for libc wrapper API's (#105)
This commit is contained in:
@ -391,6 +391,38 @@ int32_t
|
||||
wasm_runtime_addr_native_to_app(wasm_module_inst_t module_inst,
|
||||
void *native_ptr);
|
||||
|
||||
/**
|
||||
* Get the app address range (relative address) that a app address belongs to
|
||||
*
|
||||
* @param module_inst the WASM module instance
|
||||
* @param app_offset the app address to retrieve
|
||||
* @param p_app_start_offset buffer to output the app start offset if not NULL
|
||||
* @param p_app_end_offset buffer to output the app end offset if not NULL
|
||||
*
|
||||
* @return true if success, false otherwise.
|
||||
*/
|
||||
bool
|
||||
wasm_runtime_get_app_addr_range(wasm_module_inst_t module_inst,
|
||||
int32_t app_offset,
|
||||
int32_t *p_app_start_offset,
|
||||
int32_t *p_app_end_offset);
|
||||
|
||||
/**
|
||||
* Get the native address range (absolute address) that a native address belongs to
|
||||
*
|
||||
* @param module_inst the WASM module instance
|
||||
* @param native_ptr the native address to retrieve
|
||||
* @param p_native_start_addr buffer to output the native start address if not NULL
|
||||
* @param p_native_end_addr buffer to output the native end address if not NULL
|
||||
*
|
||||
* @return true if success, false otherwise.
|
||||
*/
|
||||
bool
|
||||
wasm_runtime_get_native_addr_range(wasm_module_inst_t module_inst,
|
||||
uint8_t *native_ptr,
|
||||
uint8_t **p_native_start_addr,
|
||||
uint8_t **p_native_end_addr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1302,6 +1302,84 @@ wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst,
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
wasm_runtime_get_app_addr_range(WASMModuleInstance *module_inst,
|
||||
int32 app_offset,
|
||||
int32 *p_app_start_offset,
|
||||
int32 *p_app_end_offset)
|
||||
{
|
||||
int32 app_start_offset, app_end_offset;
|
||||
WASMMemoryInstance *memory = module_inst->default_memory;
|
||||
|
||||
if (0 <= app_offset && app_offset < memory->heap_base_offset) {
|
||||
app_start_offset = 0;
|
||||
app_end_offset = NumBytesPerPage * memory->cur_page_count;
|
||||
}
|
||||
else if (memory->heap_base_offset < app_offset
|
||||
&& app_offset < memory->heap_base_offset
|
||||
+ (memory->heap_data_end - memory->heap_data)) {
|
||||
app_start_offset = memory->heap_base_offset;
|
||||
app_end_offset = memory->heap_base_offset
|
||||
+ (memory->heap_data_end - memory->heap_data);
|
||||
}
|
||||
#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
|
||||
else if (module_inst->ext_mem_data
|
||||
&& module_inst->ext_mem_base_offset <= app_offset
|
||||
&& app_offset < module_inst->ext_mem_base_offset
|
||||
+ module_inst->ext_mem_size) {
|
||||
app_start_offset = module_inst->ext_mem_base_offset;
|
||||
app_end_offset = app_start_offset + module_inst->ext_mem_size;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
return false;
|
||||
|
||||
if (p_app_start_offset)
|
||||
*p_app_start_offset = app_start_offset;
|
||||
if (p_app_end_offset)
|
||||
*p_app_end_offset = app_end_offset;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
wasm_runtime_get_native_addr_range(WASMModuleInstance *module_inst,
|
||||
uint8 *native_ptr,
|
||||
uint8 **p_native_start_addr,
|
||||
uint8 **p_native_end_addr)
|
||||
{
|
||||
uint8 *native_start_addr, *native_end_addr;
|
||||
WASMMemoryInstance *memory = module_inst->default_memory;
|
||||
|
||||
if (memory->base_addr <= (uint8*)native_ptr
|
||||
&& (uint8*)native_ptr < memory->end_addr) {
|
||||
native_start_addr = memory->memory_data;
|
||||
native_end_addr = memory->memory_data
|
||||
+ NumBytesPerPage * memory->cur_page_count;
|
||||
}
|
||||
else if (memory->heap_data <= (uint8*)native_ptr
|
||||
&& (uint8*)native_ptr < memory->heap_data_end) {
|
||||
native_start_addr = memory->heap_data;
|
||||
native_end_addr = memory->heap_data_end;
|
||||
}
|
||||
#if WASM_ENABLE_EXT_MEMORY_SPACE != 0
|
||||
else if (module_inst->ext_mem_data
|
||||
&& module_inst->ext_mem_data <= (uint8*)native_ptr
|
||||
&& (uint8*)native_ptr < module_inst->ext_mem_data_end) {
|
||||
native_start_addr = module_inst->ext_mem_data;
|
||||
native_end_addr = module_inst->ext_mem_data_end;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
return false;
|
||||
|
||||
if (p_native_start_addr)
|
||||
*p_native_start_addr = native_start_addr;
|
||||
if (p_native_end_addr)
|
||||
*p_native_end_addr = native_end_addr;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
uint32
|
||||
wasm_runtime_get_temp_ret(WASMModuleInstance *module_inst)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user