summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-09-07 16:06:54 +0000
committerUlrich Drepper <drepper@redhat.com>2006-09-07 16:06:54 +0000
commit469615bdd422cec2d89a09c765a8e965faa29722 (patch)
treefa9d9c80c22d4a88d0c0d94e1e9c2cbb982c494c
parentba40cc1540f5ee1e2082bd31b0e602a62ea3273f (diff)
[BZ #2775]
* malloc/malloc.c (sYSMALLOc): Only call grow_heap if (long) (MINSIZE + nb - old_size) is positive. * malloc/arena.c (grow_heap): When growing bail even if new_size is negative.
-rw-r--r--ChangeLog7
-rw-r--r--malloc/arena.c2
-rw-r--r--malloc/malloc.c3
3 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 67249ee234..aa8080e57d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2006-09-07 Jakub Jelinek <jakub@redhat.com>
+ [BZ #2775]
+ * malloc/malloc.c (sYSMALLOc): Only call grow_heap if
+ (long) (MINSIZE + nb - old_size) is positive.
+
+ * malloc/arena.c (grow_heap): When growing bail even if new_size
+ is negative.
+
[BZ #3155]
* sysdeps/powerpc/powerpc32/fpu/s_lrint.S (__lrint): Don't access
stack below r1.
diff --git a/malloc/arena.c b/malloc/arena.c
index 6f4b0c497b..2179174d64 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -712,7 +712,7 @@ grow_heap(h, diff) heap_info *h; long diff;
if(diff >= 0) {
diff = (diff + page_mask) & ~page_mask;
new_size = (long)h->size + diff;
- if(new_size > HEAP_MAX_SIZE)
+ if((unsigned long) new_size > (unsigned long) HEAP_MAX_SIZE)
return -1;
if(mprotect((char *)h + h->size, diff, PROT_READ|PROT_WRITE) != 0)
return -2;
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 206f3e1b6a..a369001520 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -2970,7 +2970,8 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
/* First try to extend the current heap. */
old_heap = heap_for_ptr(old_top);
old_heap_size = old_heap->size;
- if (grow_heap(old_heap, MINSIZE + nb - old_size) == 0) {
+ if ((long) (MINSIZE + nb - old_size) > 0
+ && grow_heap(old_heap, MINSIZE + nb - old_size) == 0) {
av->system_mem += old_heap->size - old_heap_size;
arena_mem += old_heap->size - old_heap_size;
#if 0