From 4a7773f7eaedc4e07f6c8d489b372fc8092402d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Mon, 30 Jan 2017 15:56:10 +0100 Subject: [PATCH] conf: check port range even for USB hubs Move the range check introduced by commit 2650d5e into virDomainUSBAddressFindPort. That way both virDomainUSBAddressRelease and virDomainUSBAddressSetAddHub can benefit from it. Reported-by: Michal Privoznik --- src/conf/domain_addr.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index e0adea9f92..1649d84eaa 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -1785,7 +1785,7 @@ virDomainUSBAddressFindPort(virDomainUSBAddressSetPtr addrs, const char *portStr) { virDomainUSBAddressHubPtr hub = NULL; - ssize_t i, lastIdx; + ssize_t i, lastIdx, targetPort; if (info->addr.usb.bus >= addrs->nbuses || !addrs->buses[info->addr.usb.bus]) { @@ -1820,7 +1820,15 @@ virDomainUSBAddressFindPort(virDomainUSBAddressSetPtr addrs, } } - *targetIdx = info->addr.usb.port[lastIdx] - 1; + targetPort = info->addr.usb.port[lastIdx] - 1; + if (targetPort >= virBitmapSize(hub->portmap)) { + virReportError(VIR_ERR_XML_ERROR, + _("requested USB port %s not present on USB bus %u"), + portStr, info->addr.usb.bus); + return NULL; + } + + *targetIdx = targetPort; return hub; } @@ -2070,13 +2078,6 @@ virDomainUSBAddressReserve(virDomainDeviceInfoPtr info, portStr))) goto cleanup; - if (targetPort >= virBitmapSize(targetHub->portmap)) { - virReportError(VIR_ERR_XML_ERROR, - _("requested USB port %s not present on USB bus %u"), - portStr, info->addr.usb.bus); - goto cleanup; - } - if (virBitmapIsBitSet(targetHub->portmap, targetPort)) { virReportError(VIR_ERR_XML_ERROR, _("Duplicate USB address bus %u port %s"), -- GitLab