On 10/26/26 8:18 AM, Daniel P. Berrangé via Devel wrote:
From: Daniel P. Berrangé <[email protected]>
Although the network XML parser should already be rejecting hostnames
with forbidden characters, add sanity checking before writing the
dnsmasq hostsfile / addhosts files that no unexpected whitespace is
present.
Signed-off-by: Daniel P. Berrangé <[email protected]>
Reviewed-by: Laine Stump <[email protected]>
---
src/util/virdnsmasq.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/src/util/virdnsmasq.c b/src/util/virdnsmasq.c
index 0e12e9ab38..a66577fd67 100644
--- a/src/util/virdnsmasq.c
+++ b/src/util/virdnsmasq.c
@@ -198,6 +198,19 @@ addnhostsWrite(int fd,
static int
addnhostsSave(dnsmasqAddnHostsfile *addnhostsfile)
{
+ size_t i, j;
+ for (i = 0; i < addnhostsfile->nhosts; i++) {
+ for (j = 0; j < addnhostsfile->hosts[i].nhostnames; j++) {
+ if (strcspn(addnhostsfile->hosts[i].hostnames[j], "\t\n\r ") !=
+ strlen(addnhostsfile->hosts[i].hostnames[j])) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("dnsmasq hostname '%1$s' contains forbidden
whitespace"),
+ addnhostsfile->hosts[i].hostnames[j]);
+ return -1;
+ }
+ }
+ }
+
return virFileRewrite(addnhostsfile->path,
0600, -1, -1,
addnhostsWrite,
@@ -341,6 +354,17 @@ hostsfileWrite(int fd,
static int
hostsfileSave(dnsmasqHostsfile *hostsfile)
{
+ size_t i;
+ for (i = 0; i < hostsfile->nhosts; i++) {
+ if (strcspn(hostsfile->hosts[i].host, "\t\n\r ") !=
+ strlen(hostsfile->hosts[i].host)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("dnsmasq hostname '%1$s' contains forbidden
whitespace"),
+ hostsfile->hosts[i].host);
+ return -1;
+ }
+ }
+
return virFileRewrite(hostsfile->path,
0600, -1, -1,
hostsfileWrite,