Limiting data and stack size by setrlimit.
This commit is contained in:
+2
-1
@@ -232,7 +232,8 @@ BUILD_DATE=$(shell date +'%d/%m/%Y')
|
|||||||
|
|
||||||
CFLAGS_JERRY = $(CFLAGS_WARNINGS) $(CFLAGS_WERROR) $(CFLAGS_WFATAL_ERRORS)
|
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 \
|
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)\"" \
|
DEFINES_JERRY += -DJERRY_BUILD_DATE="\"$(BUILD_DATE)\"" \
|
||||||
-DJERRY_COMMIT_HASH="\"$(GIT_HASH)\"" \
|
-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 size_t __fwrite (const void *, size_t, size_t, _FILE *);
|
||||||
extern int __fprintf (_FILE *, const char *, ...);
|
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_MANT_DIG (52)
|
||||||
#define DBL_DIG (10)
|
#define DBL_DIG (10)
|
||||||
#define DBL_MIN_EXP (-324)
|
#define DBL_MIN_EXP (-324)
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include <sys/resource.h>
|
||||||
|
|
||||||
#ifdef LIBC_RAW
|
#ifdef LIBC_RAW
|
||||||
|
|
||||||
#ifdef __TARGET_HOST_x64
|
#ifdef __TARGET_HOST_x64
|
||||||
@@ -349,6 +351,25 @@ __fwrite (const void *ptr, /**< data to write */
|
|||||||
return bytes_written;
|
return bytes_written;
|
||||||
} /* __fwrite */
|
} /* __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)
|
#elif defined (LIBC_MUSL)
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -474,6 +495,25 @@ __fwrite (const void *ptr, /**< data to write */
|
|||||||
return fwrite (ptr, size, nmemb, stream);
|
return fwrite (ptr, size, nmemb, stream);
|
||||||
} /* __fwrite */
|
} /* __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 */
|
#else /* !LIBC_RAW && !LIBC_MUSL */
|
||||||
# error "!LIBC_RAW && !LIBC_MUSL"
|
# error "!LIBC_RAW && !LIBC_MUSL"
|
||||||
#endif /* !LIBC_RAW && !LIBC_MUSL */
|
#endif /* !LIBC_RAW && !LIBC_MUSL */
|
||||||
|
|||||||
@@ -170,6 +170,9 @@ main (int argc __unused,
|
|||||||
int i;
|
int i;
|
||||||
size_t files_counter = 0;
|
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++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (!__strcmp ("-v", argv[i]))
|
if (!__strcmp ("-v", argv[i]))
|
||||||
|
|||||||
Reference in New Issue
Block a user