[libvirt] [PATCH]: Fix VIR_ALLOC_N for 0 byte arrays

Daniel P. Berrange berrange at redhat.com
Thu Jun 19 11:26:12 UTC 2008


On Thu, Jun 19, 2008 at 05:51:07AM -0400, Daniel Veillard wrote:
> On Thu, Jun 19, 2008 at 10:49:59AM +0200, Chris Lalancette wrote:
> > Hello,
> >      For 0.4.3, danpb's new memory management scheme went into libvirt.  This is
> > fine, except that is subtly alters the semantics of malloc(), calloc(), and
> > realloc().  In particular, if you say:
> > 
> > foo = malloc(0);
> > 
> > glibc will happily return a non-NULL pointer to you.  However, with the new
> > memory management stuff, if you say:
> > 
> > foo = VIR_ALLOC(0);
> > 
> > you will actually get a NULL pointer back.  Personally, I think this is a
> > dangerous deviation from malloc() semantics that everyone is used to, and is
> > indeed causing problems with the remote driver.  The short of it is that the
> > remote driver allocates memory on behalf of the remote side using VIR_ALLOC_N,
> > and this call is returning NULL so that the NULL checks elsewhere in the code
> > fire and return failure.
> > 
> > The attached patch fixes this situation by removing the 0 checks from the memory
> > allocation paths, and just lets them fall through to the normal malloc(),
> > calloc(), or realloc() routines, restoring old semantics.
> > 
> > Signed-off-by: Chris Lalancette <clalance at redhat.com>
> 
>   Agreed, it's a problem, +1, but
> since Dan explicitely made the == 0 test to return NULL he probably 
> had a purpose about this (I suspect detecting 0 sized memory allocations).

No, this was just a stupid bug on my part. This patch is fine.

Regards,
Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list