mempool: avoid read from freed area
authorMarko Kreen <markokr@gmail.com>
Tue, 2 Mar 2010 12:15:02 +0000 (12:15 +0000)
committerMarko Kreen <markokr@gmail.com>
Wed, 3 Mar 2010 07:50:08 +0000 (09:50 +0200)
usual/mempool.c

index 27e2f5c3dc9200e1a00024b5661656f70957bc21..51ea31720b419ee3c9c5fd16a225a38020e3d80d 100644 (file)
@@ -40,7 +40,7 @@ void *mempool_alloc(struct MemPool **pool, unsigned size)
        void *ptr;
        unsigned nsize;
 
-       size = (size + sizeof(long) - 1) & ~(sizeof(long) - 1);
+       size = ALIGN(size);
        if (cur && cur->used + size <= cur->size) {
                ptr = (char *)(cur + 1) + cur->used;
                cur->used += size;
@@ -62,10 +62,13 @@ void *mempool_alloc(struct MemPool **pool, unsigned size)
 
 void mempool_destroy(struct MemPool **pool)
 {
-       struct MemPool *cur;
-       while ((cur = *pool) != NULL) {
-               *pool = cur->prev;
+       struct MemPool *cur, *tmp;
+       if (!pool)
+               return;
+       for (cur = *pool, *pool = NULL; cur; ) {
+               tmp = cur->prev;
                free(cur);
+               cur = tmp;
        }
 }