[libvirt] cpu flags

Daniel P. Berrange berrange at redhat.com
Wed Sep 17 13:18:39 UTC 2008


On Wed, Sep 17, 2008 at 08:36:50AM -0400, Konrad Rzeszutek wrote:
> On Wed, Sep 17, 2008 at 11:43:19AM +0100, Richard W.M. Jones wrote:
> > On Tue, Sep 16, 2008 at 04:45:09PM -0400, Ben Guthro wrote:
> > > My concern is that adding to the nodeinfo struct breaks the API - such  
> > > that the structs will be different sizes between versions.
> > 
> > Extending this structure would break the A _B_ I.
> > 
> > <aside>
> > 
> > Specifically, because of dynamic linking you can have two situations
> > arising:
> > 
> >  (1) caller compiled against old libvirt links to newer libvirt
> >  (2) caller compiled against new libvirt links to older libvirt
> > 
> > You cannot tell just from the pointer passed to virNodeGetInfo how
> > large the caller's structure is, so you could end up overwriting
> > memory beyond the structure in case (1).
> > 
> > In calls such as virDomainInterfaceStats, I fixed this by having the
> > caller pass both a pointer to the structure and the size of the
> > caller's structure.  This allows us to expand the structure in future
> > in a way which won't break either case (1) or (2).  I would encourage
> > people designing future libvirt APIs which take a pointer to a
> 
> How about just having a virVersion field that would tell you what
> version of the struct it is? This being on top of the check you have.
> 
> That way you can also guard against functions that change the number of
> arguments, which would not change the size of the caller's structure.

I don't want us playing tricks with ABI based on the version number.

It is quite easy to add new structs & APIs to the public interface without
breaking ABI of existing structs & APIs.

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