Log a message when sbrk fails and return the correct error code.
authorTobias Diedrich <ranma+coreboot@tdiedrich.de>
Mon, 19 Oct 2015 17:32:12 +0000 (19:32 +0200)
committerTobias Diedrich <ranma+coreboot@tdiedrich.de>
Mon, 19 Oct 2015 17:34:16 +0000 (19:34 +0200)
Returning NULL leads to subtle corruption and malloc returning memory
addresses in the user mode space range (0x00000000-0x7fffffff).

This in turn also breaks everything that implicitly relies on malloc()ed
memory to be zeroed at the beginning (since the malloc arena is
initially zeroed).

u-boot/lib_mips/board.c

index 1572043122b3cab6786d58a35d7bd354ba10f6f2..c340b0abb03f06d1268bf0a5f8be712be6c5f083 100644 (file)
@@ -84,7 +84,9 @@ void *sbrk(ptrdiff_t increment){
        ulong new = old + increment;
 
        if((new < mem_malloc_start) || (new > mem_malloc_end)){
-               return(NULL);
+               printf("sbrk: Out of memory (%d requested > %d available)\n",
+                      increment, mem_malloc_end - old);
+               return((void*)MORECORE_FAILURE);
        }
        mem_malloc_brk = new;
        return((void *)old);