[libvirt] [PATCHv4 6/5] conf: reject controllers with duplicate indexes

Eric Blake eblake at redhat.com
Thu Apr 25 00:59:25 UTC 2013


On 04/23/2013 06:47 AM, Ján Tomko wrote:
> Reject multiple controllers with the same index,
> except for USB controllers.
> Multi-function USB controllers can have the same index.
> ---
>  src/conf/domain_conf.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 64 insertions(+)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 5740009..dd9beba 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -2574,6 +2574,68 @@ virDomainDeviceInfoIterate(virDomainDefPtr def,
>  
>  
>  static int
> +virDomainDefRejectDuplicateControllers(virDomainDefPtr def)
> +{
> +    int max_idx[VIR_DOMAIN_CONTROLLER_TYPE_LAST];
> +    virDomainControllerDefPtr cont;
> +    virBitmapPtr *bitmaps = NULL;
> +    size_t nbitmaps = 0;
> +    int ret = -1;
> +    bool b;
> +    int i;
> +
> +    if (VIR_ALLOC_N(bitmaps, VIR_DOMAIN_CONTROLLER_TYPE_LAST) < 0)
> +        goto no_memory;

Why do you stack allocate an array of max_idx, but heap allocate an
array of bitmap pointers?  It should be possible to stack allocate both
arrays, without exceeding max stack bounds, since
VIR_DOMAIN_CONTROLLER_TYPE_LAST is small.

> +
> +    for (i = 0; i < VIR_DOMAIN_CONTROLLER_TYPE_LAST; i++)
> +        max_idx[i] = -1;

Would a memset be any faster than a for loop here?

What you have is correct, so I'm comfortable giving ACK, but if you want
to post a v5 with the tweaks I mentioned, I'll review that too.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130424/2d8e5f9a/attachment-0001.sig>


More information about the libvir-list mailing list