xenParseXLUSB: Rewrite to avoid virStrncpy

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2021-03-02 14:10:00 +01:00
parent 207a9db8eb
commit 08372887ec

View File

@ -960,14 +960,10 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def)
if (list && list->type == VIR_CONF_LIST) { if (list && list->type == VIR_CONF_LIST) {
list = list->list; list = list->list;
while (list) { while (list) {
char bus[3];
char device[3];
char *key; char *key;
int busNum; int busNum;
int devNum; int devNum;
bus[0] = device[0] = '\0';
if ((list->type != VIR_CONF_STRING) || (list->str == NULL)) if ((list->type != VIR_CONF_STRING) || (list->str == NULL))
goto skipusb; goto skipusb;
/* usbdev=['hostbus=1,hostaddr=3'] */ /* usbdev=['hostbus=1,hostaddr=3'] */
@ -982,20 +978,16 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def)
if (STRPREFIX(key, "hostbus=")) { if (STRPREFIX(key, "hostbus=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(bus, data, len, sizeof(bus)) < 0) { g_autofree char *tmp = g_strndup(data, len);
virReportError(VIR_ERR_INTERNAL_ERROR,
_("bus %s too big for destination"), if (virStrToLong_i(tmp, NULL, 16, &busNum) < 0)
data);
goto skipusb; goto skipusb;
}
} else if (STRPREFIX(key, "hostaddr=")) { } else if (STRPREFIX(key, "hostaddr=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(device, data, len, sizeof(device)) < 0) { g_autofree char *tmp = g_strndup(data, len);
virReportError(VIR_ERR_INTERNAL_ERROR,
_("device %s too big for destination"), if (virStrToLong_i(tmp, NULL, 16, &devNum) < 0)
data);
goto skipusb; goto skipusb;
}
} }
while (nextkey && (nextkey[0] == ',' || while (nextkey && (nextkey[0] == ',' ||
@ -1005,10 +997,6 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def)
key = nextkey; key = nextkey;
} }
if (virStrToLong_i(bus, NULL, 16, &busNum) < 0)
goto skipusb;
if (virStrToLong_i(device, NULL, 16, &devNum) < 0)
goto skipusb;
if (!(hostdev = virDomainHostdevDefNew())) if (!(hostdev = virDomainHostdevDefNew()))
return -1; return -1;