mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-05-09 21:26:21 +00:00
Fix issue of condition settings of app boundary check (#249)
This commit is contained in:
parent
e8e45aeecd
commit
44ccfd20ad
|
@ -635,11 +635,10 @@ aot_validate_app_addr(AOTModuleInstance *module_inst,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (app_offset <= module_inst->heap_base_offset
|
if (module_inst->heap_base_offset <= app_offset
|
||||||
|| app_offset + (int32)size > (int32)module_inst->memory_data_size) {
|
&& app_offset + (int32)size <= (int32)module_inst->memory_data_size) {
|
||||||
goto fail;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
fail:
|
fail:
|
||||||
aot_set_exception(module_inst, "out of bounds memory access");
|
aot_set_exception(module_inst, "out of bounds memory access");
|
||||||
return false;
|
return false;
|
||||||
|
@ -657,12 +656,11 @@ aot_validate_native_addr(AOTModuleInstance *module_inst,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr <= (uint8*)module_inst->heap_data.ptr
|
if ((uint8*)module_inst->heap_data.ptr <= addr
|
||||||
|| addr + size > (uint8*)module_inst->memory_data.ptr
|
&& addr + size <= (uint8*)module_inst->memory_data.ptr
|
||||||
+ memory_data_size) {
|
+ memory_data_size) {
|
||||||
goto fail;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
fail:
|
fail:
|
||||||
aot_set_exception(module_inst, "out of bounds memory access");
|
aot_set_exception(module_inst, "out of bounds memory access");
|
||||||
return false;
|
return false;
|
||||||
|
@ -674,7 +672,7 @@ aot_addr_app_to_native(AOTModuleInstance *module_inst, int32 app_offset)
|
||||||
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
||||||
uint8 *addr = (uint8 *)module_inst->memory_data.ptr + app_offset;
|
uint8 *addr = (uint8 *)module_inst->memory_data.ptr + app_offset;
|
||||||
|
|
||||||
if ((uint8*)module_inst->heap_data.ptr < addr
|
if ((uint8*)module_inst->heap_data.ptr <= addr
|
||||||
&& addr < (uint8*)module_inst->memory_data.ptr
|
&& addr < (uint8*)module_inst->memory_data.ptr
|
||||||
+ memory_data_size)
|
+ memory_data_size)
|
||||||
return addr;
|
return addr;
|
||||||
|
@ -687,7 +685,7 @@ aot_addr_native_to_app(AOTModuleInstance *module_inst, void *native_ptr)
|
||||||
uint8 *addr = (uint8*)native_ptr;
|
uint8 *addr = (uint8*)native_ptr;
|
||||||
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
||||||
|
|
||||||
if ((uint8*)module_inst->heap_data.ptr < addr
|
if ((uint8*)module_inst->heap_data.ptr <= addr
|
||||||
&& addr < (uint8*)module_inst->memory_data.ptr
|
&& addr < (uint8*)module_inst->memory_data.ptr
|
||||||
+ memory_data_size)
|
+ memory_data_size)
|
||||||
return (int32)(addr - (uint8*)module_inst->memory_data.ptr);
|
return (int32)(addr - (uint8*)module_inst->memory_data.ptr);
|
||||||
|
@ -702,7 +700,7 @@ aot_get_app_addr_range(AOTModuleInstance *module_inst,
|
||||||
{
|
{
|
||||||
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
||||||
|
|
||||||
if (module_inst->heap_base_offset < app_offset
|
if (module_inst->heap_base_offset <= app_offset
|
||||||
&& app_offset < memory_data_size) {
|
&& app_offset < memory_data_size) {
|
||||||
if (p_app_start_offset)
|
if (p_app_start_offset)
|
||||||
*p_app_start_offset = module_inst->heap_base_offset;
|
*p_app_start_offset = module_inst->heap_base_offset;
|
||||||
|
@ -722,7 +720,7 @@ aot_get_native_addr_range(AOTModuleInstance *module_inst,
|
||||||
uint8 *addr = (uint8*)native_ptr;
|
uint8 *addr = (uint8*)native_ptr;
|
||||||
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
int32 memory_data_size = (int32)module_inst->memory_data_size;
|
||||||
|
|
||||||
if ((uint8*)module_inst->heap_data.ptr < addr
|
if ((uint8*)module_inst->heap_data.ptr <= addr
|
||||||
&& addr < (uint8*)module_inst->memory_data.ptr
|
&& addr < (uint8*)module_inst->memory_data.ptr
|
||||||
+ memory_data_size) {
|
+ memory_data_size) {
|
||||||
if (p_native_start_addr)
|
if (p_native_start_addr)
|
||||||
|
|
|
@ -952,11 +952,10 @@ wasm_validate_app_addr(WASMModuleInstance *module_inst,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (app_offset <= memory->heap_base_offset
|
if (memory->heap_base_offset <= app_offset
|
||||||
|| app_offset + (int32)size > memory_data_size) {
|
&& app_offset + (int32)size <= memory_data_size) {
|
||||||
goto fail;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
fail:
|
fail:
|
||||||
wasm_set_exception(module_inst, "out of bounds memory access");
|
wasm_set_exception(module_inst, "out of bounds memory access");
|
||||||
return false;
|
return false;
|
||||||
|
@ -975,11 +974,10 @@ wasm_validate_native_addr(WASMModuleInstance *module_inst,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr <= memory->heap_data
|
if (memory->heap_data <= addr
|
||||||
|| addr + size > memory->memory_data + memory_data_size) {
|
&& addr + size <= memory->memory_data + memory_data_size) {
|
||||||
goto fail;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
fail:
|
fail:
|
||||||
wasm_set_exception(module_inst, "out of bounds memory access");
|
wasm_set_exception(module_inst, "out of bounds memory access");
|
||||||
return false;
|
return false;
|
||||||
|
@ -994,7 +992,7 @@ wasm_addr_app_to_native(WASMModuleInstance *module_inst,
|
||||||
int32 memory_data_size =
|
int32 memory_data_size =
|
||||||
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
||||||
|
|
||||||
if (memory->heap_data < addr
|
if (memory->heap_data <= addr
|
||||||
&& addr < memory->memory_data + memory_data_size)
|
&& addr < memory->memory_data + memory_data_size)
|
||||||
return addr;
|
return addr;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1009,7 +1007,7 @@ wasm_addr_native_to_app(WASMModuleInstance *module_inst,
|
||||||
int32 memory_data_size =
|
int32 memory_data_size =
|
||||||
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
||||||
|
|
||||||
if (memory->heap_data < addr
|
if (memory->heap_data <= addr
|
||||||
&& addr < memory->memory_data + memory_data_size)
|
&& addr < memory->memory_data + memory_data_size)
|
||||||
return (int32)(addr - memory->memory_data);
|
return (int32)(addr - memory->memory_data);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1025,7 +1023,7 @@ wasm_get_app_addr_range(WASMModuleInstance *module_inst,
|
||||||
int32 memory_data_size =
|
int32 memory_data_size =
|
||||||
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
||||||
|
|
||||||
if (memory->heap_base_offset < app_offset
|
if (memory->heap_base_offset <= app_offset
|
||||||
&& app_offset < memory_data_size) {
|
&& app_offset < memory_data_size) {
|
||||||
if (p_app_start_offset)
|
if (p_app_start_offset)
|
||||||
*p_app_start_offset = memory->heap_base_offset;
|
*p_app_start_offset = memory->heap_base_offset;
|
||||||
|
@ -1047,7 +1045,7 @@ wasm_get_native_addr_range(WASMModuleInstance *module_inst,
|
||||||
int32 memory_data_size =
|
int32 memory_data_size =
|
||||||
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
(int32)(memory->num_bytes_per_page * memory->cur_page_count);
|
||||||
|
|
||||||
if (memory->heap_data < addr
|
if (memory->heap_data <= addr
|
||||||
&& addr < memory->memory_data + memory_data_size) {
|
&& addr < memory->memory_data + memory_data_size) {
|
||||||
if (p_native_start_addr)
|
if (p_native_start_addr)
|
||||||
*p_native_start_addr = memory->heap_data;
|
*p_native_start_addr = memory->heap_data;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user