Bladeren bron

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.
Wenyong Huang 4 jaren geleden
bovenliggende
commit
d62543c99c

+ 1 - 1
core/iwasm/common/wasm_memory.c

@@ -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 *

+ 3 - 0
core/iwasm/common/wasm_memory.h

@@ -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

+ 1 - 3
core/iwasm/interpreter/wasm_loader.c

@@ -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)
 {
 {

+ 1 - 3
core/iwasm/interpreter/wasm_mini_loader.c

@@ -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,

+ 4 - 12
core/shared/utils/bh_common.c

@@ -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)
-        || s1max > RSIZE_MAX) {
+    if (NULL == s1 || NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1)) {
         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)
-        || s1max > RSIZE_MAX) {
+    if (NULL == s1 || NULL == s2 || s1max < (strlen(s2) + 1)) {
         return -1;
         return -1;
     }
     }