Don't use the main arena in retry path if it is corrupt
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Mon, 24 Aug 2015 09:03:07 +0000 (14:33 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Mon, 24 Aug 2015 09:03:07 +0000 (14:33 +0530)
If allocation on a non-main arena fails, the main arena is used
without checking to see if it is corrupt.  Add a check that avoids the
main arena if it is corrupt.

* malloc/arena.c (arena_get_retry): Don't use main_arena if it is
corrupt.

ChangeLog
malloc/arena.c

index 1b5b03e..dae71ce 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2015-08-24  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
+       * malloc/arena.c (arena_get_retry): Don't use main_arena if it
+       is corrupt.
+
        * malloc/arena.c (arena_get2): Drop unused argument.
        (arena_lock): Adjust.
        (arena_get_retry): Likewise.
index cfec94d..b44e307 100644 (file)
@@ -909,6 +909,10 @@ arena_get_retry (mstate ar_ptr, size_t bytes)
   if (ar_ptr != &main_arena)
     {
       (void) mutex_unlock (&ar_ptr->mutex);
+      /* Don't touch the main arena if it is corrupt.  */
+      if (arena_is_corrupt (&main_arena))
+       return NULL;
+
       ar_ptr = &main_arena;
       (void) mutex_lock (&ar_ptr->mutex);
     }