From 0066036fc69e887b7f048aa48af61e0ead8daf90 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Mon, 24 Jan 2011 23:50:09 +0100 Subject: Sanitizing sbrk with stack stuff. --- os/src/sbrk.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'os/src') diff --git a/os/src/sbrk.c b/os/src/sbrk.c index 221c809..4208b2e 100644 --- a/os/src/sbrk.c +++ b/os/src/sbrk.c @@ -8,13 +8,15 @@ // Mostly stolen from mbed-freertos -extern unsigned int __heap_start, __heap_end; +extern uintptr_t __heap_start, __heap_end; +extern uintptr_t __stack_start __attribute__((weak)); /* Low-level bulk RAM allocator -- used by Newlib's Malloc */ void *heap_end = NULL; PRIVILEGED_FUNCTION void *_sbrk_r(struct _reent *ptr, ptrdiff_t incr) { void *prev_heap_end, *next_heap_end, *ret; + void *stack_min = (void *)(__stack_start ? __stack_start : __heap_end); taskENTER_CRITICAL(); { @@ -27,10 +29,10 @@ PRIVILEGED_FUNCTION void *_sbrk_r(struct _reent *ptr, ptrdiff_t incr) prev_heap_end = heap_end; /* Align to always be on 8-byte boundaries */ - next_heap_end = (void *)((((unsigned int)heap_end + incr) + 7) & ~7); + next_heap_end = (void *)((((uintptr_t)heap_end + incr) + 7) & ~7); /* Check if this allocation would exceed the end of the ram - would probably get into the stack first however */ - if (next_heap_end > (void *)&__heap_end) + if (next_heap_end > stack_min) { ptr->_errno = ENOMEM; ret = NULL; -- cgit v1.2.3