Limiting data and stack size by setrlimit.

This commit is contained in:
Ruben Ayrapetyan 2014-08-14 16:08:06 +04:00
parent 63133c247f
commit 6553daa22b
4 changed files with 47 additions and 1 deletions

View File

@ -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)\"" \

View File

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

View File

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

View File

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