From 08372887ec4ab3818a201ea671563a07894d2087 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 2 Mar 2021 14:10:00 +0100 Subject: [PATCH] xenParseXLUSB: Rewrite to avoid virStrncpy MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/libxl/xen_xl.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c index 1bce31a549..29c145851e 100644 --- a/src/libxl/xen_xl.c +++ b/src/libxl/xen_xl.c @@ -960,14 +960,10 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def) if (list && list->type == VIR_CONF_LIST) { list = list->list; while (list) { - char bus[3]; - char device[3]; char *key; int busNum; int devNum; - bus[0] = device[0] = '\0'; - if ((list->type != VIR_CONF_STRING) || (list->str == NULL)) goto skipusb; /* usbdev=['hostbus=1,hostaddr=3'] */ @@ -982,20 +978,16 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def) if (STRPREFIX(key, "hostbus=")) { int len = nextkey ? (nextkey - data) : strlen(data); - if (virStrncpy(bus, data, len, sizeof(bus)) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("bus %s too big for destination"), - data); + g_autofree char *tmp = g_strndup(data, len); + + if (virStrToLong_i(tmp, NULL, 16, &busNum) < 0) goto skipusb; - } } else if (STRPREFIX(key, "hostaddr=")) { int len = nextkey ? (nextkey - data) : strlen(data); - if (virStrncpy(device, data, len, sizeof(device)) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("device %s too big for destination"), - data); + g_autofree char *tmp = g_strndup(data, len); + + if (virStrToLong_i(tmp, NULL, 16, &devNum) < 0) goto skipusb; - } } while (nextkey && (nextkey[0] == ',' || @@ -1005,10 +997,6 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def) 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())) return -1; -- 2.47.2