[libvirt] [PATCH 2/2] device_conf: PCI address pci_0000_00_00_0 is also valid

Eric Blake eblake at redhat.com
Tue Aug 5 16:43:15 UTC 2014


On 08/05/2014 10:18 AM, Pavel Hrdina wrote:
> All the variables used for pci addr in virDevicePCIAddress are
> unsigned and therefore in this validation function they never cannot
> be less than zero. This check will fail only for the address above,
> but that address is valid so we can safely return true instead.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1055331
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  src/conf/device_conf.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
> index 61c73dc..797b2b6 100644
> --- a/src/conf/device_conf.c
> +++ b/src/conf/device_conf.c
> @@ -44,7 +44,8 @@ bool virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr)
>      /* PCI bus has 32 slots and 8 functions per slot */
>      if (addr->slot >= 32 || addr->function >= 8)
>          return false;
> -    return addr->domain || addr->bus || addr->slot;
> +
> +    return true;
>  }

I think we're going to need more than this :(

domain_conf.c uses it to feed this code in virDomainNetFindIdx:

    bool PCIAddrSpecified = virDomainDeviceAddressIsValid(&net->info,

VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI);

Right now, if you omit an <address> element, it is 0-initialized and the
in-memory structure happens to be pci_0000_00_00_0, but PCIAddrSpecified
is set to false, which then lets us auto-pick an appropriate (non-zero)
address.  If you explicitly specify an all-0 address, you get the same
behavior.

With your patch, it looks like you want to allow explicit specification
of an all-0 address.  But for that to work, we now need to modify
domain_conf.h (and/or device_conf.h) to ALSO have a bool flag that says
whether an address was specified (since you are allowing explicit
specification of all-0, where we should NOT auto-assign a different
address) or omitted.

NACK to this version; the correct solution is one where an explicit
all-0 address behaves differently than omitting <address>.

-- 
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: 539 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140805/f5b3d94b/attachment-0001.sig>


More information about the libvir-list mailing list