From 2f646237dad4563887bf467ecf3ae87c9b7f429e Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Wed, 31 Mar 2010 10:22:10 -0400 Subject: [PATCH] Blank out invalid interface names with escaped letters etc. Check that interface names only contain valid characters. Blank them out otherwise. Valid characters in this code are currently a-z,A-Z,0-9, '-' and '_'. --- src/conf/domain_conf.c | 9 ++++++++- src/conf/domain_conf.h | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 66aa53ec3c..bf4e657859 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1776,6 +1776,11 @@ cleanup: } +static bool +isValidIfname(const char *ifname) { + return (strspn(ifname, VALID_IFNAME_CHARS) == strlen(ifname)); +} + /* Parse the XML definition for a network interface * @param node XML nodeset to parse for net definition @@ -1859,8 +1864,10 @@ virDomainNetDefParseXML(virCapsPtr caps, xmlStrEqual(cur->name, BAD_CAST "target")) { ifname = virXMLPropString(cur, "dev"); if ((ifname != NULL) && - (STRPREFIX((const char*)ifname, "vnet"))) { + ((STRPREFIX((const char*)ifname, "vnet")) || + (!isValidIfname(ifname)))) { /* An auto-generated target name, blank it out */ + /* blank out invalid interface names */ VIR_FREE(ifname); } } else if ((script == NULL) && diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ed1a4ad7f8..69b64d649e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -297,6 +297,9 @@ struct _virDomainNetDef { virNWFilterHashTablePtr filterparams; }; +# define VALID_IFNAME_CHARS \ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_" + enum virDomainChrTargetType { VIR_DOMAIN_CHR_TARGET_TYPE_NULL = 0, VIR_DOMAIN_CHR_TARGET_TYPE_MONITOR,