Enlarge max pool size and fix bh_memcpy_s dest max size check (#1151)

Enlarge max pool size and fix bh_memcpy_s dest max size check to support
large linear memory, e.g. with initial page count 65535.
This commit is contained in:
Wenyong Huang 2022-05-07 16:09:16 +08:00 committed by GitHub
parent a7f4c3c15c
commit d62543c99c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 10 additions and 19 deletions

View File

@ -86,7 +86,7 @@ wasm_runtime_memory_pool_size()
if (memory_mode == MEMORY_MODE_POOL) if (memory_mode == MEMORY_MODE_POOL)
return global_pool_size; return global_pool_size;
else else
return 1 * BH_GB; return UINT32_MAX;
} }
static inline void * static inline void *

View File

@ -20,6 +20,9 @@ wasm_runtime_memory_init(mem_alloc_type_t mem_alloc_type,
void void
wasm_runtime_memory_destroy(); wasm_runtime_memory_destroy();
unsigned
wasm_runtime_memory_pool_size();
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -10,6 +10,7 @@
#include "wasm_opcode.h" #include "wasm_opcode.h"
#include "wasm_runtime.h" #include "wasm_runtime.h"
#include "../common/wasm_native.h" #include "../common/wasm_native.h"
#include "../common/wasm_memory.h"
#if WASM_ENABLE_DEBUG_INTERP != 0 #if WASM_ENABLE_DEBUG_INTERP != 0
#include "../libraries/debug-engine/debug_engine.h" #include "../libraries/debug-engine/debug_engine.h"
#endif #endif
@ -1229,9 +1230,6 @@ fail:
return false; return false;
} }
unsigned
wasm_runtime_memory_pool_size();
static bool static bool
check_memory_init_size(uint32 init_size, char *error_buf, uint32 error_buf_size) check_memory_init_size(uint32 init_size, char *error_buf, uint32 error_buf_size)
{ {

View File

@ -10,6 +10,7 @@
#include "wasm_opcode.h" #include "wasm_opcode.h"
#include "wasm_runtime.h" #include "wasm_runtime.h"
#include "../common/wasm_native.h" #include "../common/wasm_native.h"
#include "../common/wasm_memory.h"
/* Read a value of given type from the address pointed to by the given /* Read a value of given type from the address pointed to by the given
pointer and increase the pointer to the position just after the pointer and increase the pointer to the position just after the
@ -497,9 +498,6 @@ load_table_import(const uint8 **p_buf, const uint8 *buf_end,
return true; return true;
} }
unsigned
wasm_runtime_memory_pool_size();
static bool static bool
load_memory_import(const uint8 **p_buf, const uint8 *buf_end, load_memory_import(const uint8 **p_buf, const uint8 *buf_end,
WASMModule *parent_module, const char *sub_module_name, WASMModule *parent_module, const char *sub_module_name,

View File

@ -5,12 +5,6 @@
#include "bh_common.h" #include "bh_common.h"
#ifdef RSIZE_MAX
#undef RSIZE_MAX
#endif
#define RSIZE_MAX 0x7FFFFFFF
int int
b_memcpy_s(void *s1, unsigned int s1max, const void *s2, unsigned int n) b_memcpy_s(void *s1, unsigned int s1max, const void *s2, unsigned int n)
{ {
@ -20,7 +14,7 @@ b_memcpy_s(void *s1, unsigned int s1max, const void *s2, unsigned int n)
return 0; return 0;
} }
if (s1 == NULL || s1max > RSIZE_MAX) { if (s1 == NULL) {
return -1; return -1;
} }
if (s2 == NULL || n > s1max) { if (s2 == NULL || n > s1max) {
@ -40,7 +34,7 @@ b_memmove_s(void *s1, unsigned int s1max, const void *s2, unsigned int n)
return 0; return 0;
} }
if (s1 == NULL || s1max > RSIZE_MAX) { if (s1 == NULL) {
return -1; return -1;
} }
if (s2 == NULL || n > s1max) { if (s2 == NULL || n > s1max) {
@ -54,8 +48,7 @@ b_memmove_s(void *s1, unsigned int s1max, const void *s2, unsigned int n)
int int
b_strcat_s(char *s1, unsigned int s1max, const char *s2) b_strcat_s(char *s1, unsigned int s1max, const char *s2)
{ {
if (NULL == s1 || NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) if (NULL == s1 || NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1)) {
|| s1max > RSIZE_MAX) {
return -1; return -1;
} }
@ -66,8 +59,7 @@ b_strcat_s(char *s1, unsigned int s1max, const char *s2)
int int
b_strcpy_s(char *s1, unsigned int s1max, const char *s2) b_strcpy_s(char *s1, unsigned int s1max, const char *s2)
{ {
if (NULL == s1 || NULL == s2 || s1max < (strlen(s2) + 1) if (NULL == s1 || NULL == s2 || s1max < (strlen(s2) + 1)) {
|| s1max > RSIZE_MAX) {
return -1; return -1;
} }