This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Original libnosys doesn't check heap overflow. This patch adds an ARM target specific check there, without breaking other targets. OK to upstream? ChangeLog (libgloss): 2014-02-27 Joey Ye <joey.ye@arm.com> libnosys/sbrk.c (errno.h): New include. (errno): Redefine. (STACK_PTR): Define macro for __arm__. (_sbrk): Check STACK_PTR. diff --git a/libgloss/libnosys/sbrk.c b/libgloss/libnosys/sbrk.c index 86c130a..910db20 100644 --- a/libgloss/libnosys/sbrk.c +++ b/libgloss/libnosys/sbrk.c @@ -2,6 +2,16 @@ #include "config.h" #include <_syslist.h> +#include <errno.h> +#undef errno +extern int errno; + +#undef STACK_PTR +#ifdef __arm__ +/* Register name faking - works in collusion with the linker. */ +register char *stack_ptr asm ("sp"); +#define STACK_PTR stack_ptr +#endif void * _sbrk (incr) @@ -15,6 +25,15 @@ _sbrk (incr) heap_end = & end; prev_heap_end = heap_end; + +#ifdef STACK_PTR + if (heap_end + incr > STACK_PTR) + { + errno = ENOMEM; + return (void *) -1; + } +#endif + heap_end += incr; return (void *) prev_heap_end;
Attachment:
nosys_sbrk_overflow-0227.patch
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |