potential mem leak when system is low on memory

From: Amit Choudhary
Date: Mon Oct 16 2006 - 18:52:35 EST


Hi All,

I was just scrubbing the kernel for checking the return ststus of
kmalloc(), and I saw at many places the following things. I just
wanted to report this.

1. If there are more than one kmalloc() calls in the same function,
and if kmalloc() returns NULL for one of them, then the memory
obtained from previous kmalloc() calls is not released.

Something like:

func()
{
var1 = kmalloc(size);
if (!var1)
return -ENOMEM;

var2 = kmalloc(size);
if (!var2)
return -ENOMEM;

/* mem leak as var1 is not freed */

}

2. Sometimes, memory is allocated in a loop. So, if kmalloc() fails at
some point, memory allocated previously is not released.

func()
{
for (i = 0; i < LENGTH; i++) {
var1[i] = kmalloc(size);
if (!var1[i])
return -ENOMEM;

/* mem leak as var1[0] to var1[i - 1] is not freed */

}
}

So, already the system is running low on memory and on top of it there
are leaks.

-Amit
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/