Re: [PATCH] kernel: use kcalloc instead kmalloc/memset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2005-08-05 at 12:56 +0200, Roman Zippel wrote:
> Hi,
> 
> On Fri, 5 Aug 2005, Arjan van de Ven wrote:
> 
> > > > we've had a non-negliable amount of security holes because of this
> > > 
> > > So why don't we have a similiar kmalloc()?
> > 
> > nope kmalloc is not an array allocator
> > 
> > > > it makes it easy and safe. Of course you can and should check it in all
> > > > users. Just that using a safer API is generally better than forcing
> > > > everyone to do it themselves.
> > > 
> > > How exactly does this make it a "safe API"? Even if it checks for this one 
> > > case, it still makes the user suspectible for allocating big amounts of 
> > > unswappable memory.
> > 
> > 128Kb max.
> 
> You completely missed the point and didn't answer my questions at all... :-(

I found it hard to understand your question.

Maybe it helps if I give the basic bug scenario first (pseudo C)

void some_ioctl_func(...)
{
  int count, i;
  struct foo *ptr;

  copy_from_user(&count,...);

  ptr = kmalloc(sizeof(struct foo) * count);

  if (!ptr)
     return -ENOMEM;

  for (i=0; i<count; i++) {
      initialize(ptr+i);
  }
}


if the user picks count such that the multiplication overflows, the
kmalloc will actually *succeed* in getting a chunk between 0 and 128Kb.
The subsequent "fill the array up" will overwrite a LOT of kernel memory
though.

Fixing the hole of course involves checking "count" for too high a
value. Using kcalloc() will check for this same overflow inside kcalloc
and prevent it (eg return NULL) if one of these slips through.


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

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux