mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Limiting data and stack size by setrlimit.
This commit is contained in:
parent
63133c247f
commit
6553daa22b
@ -232,7 +232,8 @@ BUILD_DATE=$(shell date +'%d/%m/%Y')
|
||||
|
||||
CFLAGS_JERRY = $(CFLAGS_WARNINGS) $(CFLAGS_WERROR) $(CFLAGS_WFATAL_ERRORS)
|
||||
DEFINES_JERRY = -DMEM_HEAP_CHUNK_SIZE=$$((64)) -DMEM_HEAP_AREA_SIZE=$$((2 * 1024 + 512)) -DMEM_STATS \
|
||||
-DCONFIG_ECMA_REFERENCE_COUNTER_WIDTH=$$((10))
|
||||
-DCONFIG_ECMA_REFERENCE_COUNTER_WIDTH=$$((10)) \
|
||||
-DCONFIG_MEM_STACK_LIMIT=$$((4 * 1024)) -DCONFIG_MEM_DATA_LIMIT_MINUS_HEAP_SIZE=$$((1024))
|
||||
|
||||
DEFINES_JERRY += -DJERRY_BUILD_DATE="\"$(BUILD_DATE)\"" \
|
||||
-DJERRY_COMMIT_HASH="\"$(GIT_HASH)\"" \
|
||||
|
||||
@ -100,6 +100,8 @@ extern size_t __fread (void *, size_t, size_t, _FILE *);
|
||||
extern size_t __fwrite (const void *, size_t, size_t, _FILE *);
|
||||
extern int __fprintf (_FILE *, const char *, ...);
|
||||
|
||||
extern void jrt_set_mem_limits (size_t data_size, size_t stack_size);
|
||||
|
||||
#define DBL_MANT_DIG (52)
|
||||
#define DBL_DIG (10)
|
||||
#define DBL_MIN_EXP (-324)
|
||||
|
||||
@ -22,6 +22,8 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <sys/resource.h>
|
||||
|
||||
#ifdef LIBC_RAW
|
||||
|
||||
#ifdef __TARGET_HOST_x64
|
||||
@ -349,6 +351,25 @@ __fwrite (const void *ptr, /**< data to write */
|
||||
return bytes_written;
|
||||
} /* __fwrite */
|
||||
|
||||
/**
|
||||
* Setup new memory limits
|
||||
*/
|
||||
void
|
||||
jrt_set_mem_limits (size_t data_size, /**< limit for data + bss + brk heap */
|
||||
size_t stack_size) /**< limit for stack */
|
||||
{
|
||||
struct rlimit data_limit = { data_size, data_size };
|
||||
struct rlimit stack_limit = { stack_size, stack_size };
|
||||
|
||||
int ret;
|
||||
|
||||
SYSCALL_2 (__NR_setrlimit, RLIMIT_DATA, &data_limit, ret);
|
||||
JERRY_ASSERT (ret == 0);
|
||||
|
||||
SYSCALL_2 (__NR_setrlimit, RLIMIT_STACK, &stack_limit, ret);
|
||||
JERRY_ASSERT (ret == 0);
|
||||
} /* jrt_set_mem_limits */
|
||||
|
||||
#elif defined (LIBC_MUSL)
|
||||
|
||||
#include <stdio.h>
|
||||
@ -474,6 +495,25 @@ __fwrite (const void *ptr, /**< data to write */
|
||||
return fwrite (ptr, size, nmemb, stream);
|
||||
} /* __fwrite */
|
||||
|
||||
/**
|
||||
* Setup new memory limits
|
||||
*/
|
||||
void
|
||||
jrt_set_mem_limits (size_t data_size, /**< limit for data + bss + brk heap */
|
||||
size_t stack_size) /**< limit for stack */
|
||||
{
|
||||
struct rlimit data_limit = { data_size, data_size };
|
||||
struct rlimit stack_limit = { stack_size, stack_size };
|
||||
|
||||
int ret;
|
||||
|
||||
ret = setrlimit (RLIMIT_DATA, &data_limit);
|
||||
JERRY_ASSERT (ret == 0);
|
||||
|
||||
ret = setrlimit (RLIMIT_STACK, &stack_limit);
|
||||
JERRY_ASSERT (ret == 0);
|
||||
} /* jrt_set_mem_limits */
|
||||
|
||||
#else /* !LIBC_RAW && !LIBC_MUSL */
|
||||
# error "!LIBC_RAW && !LIBC_MUSL"
|
||||
#endif /* !LIBC_RAW && !LIBC_MUSL */
|
||||
|
||||
@ -170,6 +170,9 @@ main (int argc __unused,
|
||||
int i;
|
||||
size_t files_counter = 0;
|
||||
|
||||
jrt_set_mem_limits (MEM_HEAP_AREA_SIZE + CONFIG_MEM_DATA_LIMIT_MINUS_HEAP_SIZE,
|
||||
CONFIG_MEM_STACK_LIMIT);
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (!__strcmp ("-v", argv[i]))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user