From 6a2d7e4727af3c9a9bf526567d638d7627331267 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Mon, 23 May 2016 23:50:43 +0200 Subject: [PATCH] create VMA region by increasing the heap --- hermit/kernel/main.c | 3 +++ hermit/kernel/syscall.c | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/hermit/kernel/main.c b/hermit/kernel/main.c index 8d2b2fa5d..e9fbaeb72 100644 --- a/hermit/kernel/main.c +++ b/hermit/kernel/main.c @@ -328,6 +328,9 @@ static int initd(void* arg) curr_task->heap->start = PAGE_FLOOR(heap); curr_task->heap->end = PAGE_FLOOR(heap); + // reserve VMA region + vma_add(curr_task->heap->start, curr_task->heap->start+PAGE_SIZE, VMA_HEAP|VMA_USER); + //create_kernel_task(NULL, foo, "foo1", NORMAL_PRIO); //create_kernel_task(NULL, foo, "foo2", NORMAL_PRIO); diff --git a/hermit/kernel/syscall.c b/hermit/kernel/syscall.c index aac480da5..439f1f1ce 100644 --- a/hermit/kernel/syscall.c +++ b/hermit/kernel/syscall.c @@ -243,8 +243,10 @@ ssize_t sys_sbrk(ssize_t incr) ret = heap->end; heap->end += incr; - if (heap->end < heap->start) - heap->end = heap->start; + + // reserve VMA regions + if (PAGE_CEIL(heap->end) > PAGE_CEIL(ret)) + vma_add(PAGE_CEIL(ret+PAGE_SIZE), PAGE_FLOOR(heap->end), VMA_HEAP|VMA_USER); // allocation and mapping of new pages for the heap // is catched by the pagefault handler