From ee6720e686c4d06b7480b5426dde87e6ee626177 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov <gorcunov@gmail.com> Date: Wed, 2 Oct 2019 21:42:05 +0300 Subject: [PATCH] fiber: Make sure the guard page is created The mprotect() syscall may fail due to heavy memory pressure (say there is no enough resources to split VMAs and etc). In this case we must not proceed without guard page but refuse to create a new fiber. Closes #4541 Signed-off-by: Kirill Yukhin <kyukhin@tarantool.org> (cherry picked from commit e58dfe07189134297ea956eb70cd7d96e20a6c6e) --- src/lib/core/fiber.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c index dde556b85d..a7dc665ff3 100644 --- a/src/lib/core/fiber.c +++ b/src/lib/core/fiber.c @@ -926,7 +926,11 @@ fiber_stack_create(struct fiber *fiber, size_t stack_size) (char *)fiber->stack + fiber->stack_size); - fiber_mprotect(guard, page_size, PROT_NONE); + if (fiber_mprotect(guard, page_size, PROT_NONE)) { + fiber_stack_destroy(fiber, &cord()->slabc); + return -1; + } + fiber_stack_watermark_create(fiber); return 0; } -- GitLab