[PATCH] __kmalloc: Generate BUG if size requested is too large.
authorChristoph Lameter <clameter@engr.sgi.com>
Fri, 23 Sep 2005 04:44:10 +0000 (21:44 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 23 Sep 2005 05:17:36 +0000 (22:17 -0700)
I had an issue on ia64 where I got a bug in kernel/workqueue because
kzalloc returned a NULL pointer due to the task structure getting too big
for the slab allocator.  Usually these cases are caught by the kmalloc
macro in include/linux/slab.h.

Compilation will fail if a too big value is passed to kmalloc.

However, kzalloc uses __kmalloc which has no check for that.  This patch
makes __kmalloc bug if a too large entity is requested.

Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
mm/slab.c

index c9adfce004056d2539ffa04a9ab09c1a2773d89d..ad113c431e39053a7ac605f8fc3e20aa927eaf96 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -2907,8 +2907,7 @@ void *__kmalloc(size_t size, unsigned int __nocast flags)
         * functions.
         */
        cachep = __find_general_cachep(size, flags);
-       if (unlikely(cachep == NULL))
-               return NULL;
+       BUG_ON(!cachep);                /* Allocation size too large for kmalloc */
        return __cache_alloc(cachep, flags);
 }
 EXPORT_SYMBOL(__kmalloc);