]> granicus.if.org Git - gc/commitdiff
Fix calloc() overflow
authorXi Wang <xi.wang@gmail.com>
Wed, 14 Mar 2012 20:46:49 +0000 (04:46 +0800)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 15 Mar 2012 08:46:46 +0000 (16:46 +0800)
* malloc.c (calloc): Check multiplication overflow in calloc(),
assuming REDIRECT_MALLOC.

malloc.c

index da68f1338806f70b56f6663e62f4975a3428342c..cc0cc00124ee448daa22bb6e0f8bdbbf4c9d77e3 100644 (file)
--- a/malloc.c
+++ b/malloc.c
@@ -372,8 +372,13 @@ void * malloc(size_t lb)
   }
 #endif /* GC_LINUX_THREADS */
 
+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
 void * calloc(size_t n, size_t lb)
 {
+    if (lb && n > SIZE_MAX / lb)
+      return NULL;
 #   if defined(GC_LINUX_THREADS) /* && !defined(USE_PROC_FOR_LIBRARIES) */
         /* libpthread allocated some memory that is only pointed to by  */
         /* mmapped thread stacks.  Make sure it's not collectable.      */