From 3c558f56f807a23f0765912d0463d905f23ceb13 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 2 Nov 2021 16:01:57 +0100 Subject: [PATCH] conf: Convert 'chr' in virDomainShmemDef to proper pointer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The main reason is to ensure that the private data are properly allocated for every instance. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/conf/domain_audit.c | 2 +- src/conf/domain_conf.c | 17 ++++++++++------- src/conf/domain_conf.h | 2 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_domain.c | 6 +++--- src/qemu/qemu_hotplug.c | 2 +- src/security/virt-aa-helper.c | 4 ++-- 7 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index b08233fa49..69c5792b07 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -898,7 +898,7 @@ virDomainAuditShmem(virDomainObj *vm, { char uuidstr[VIR_UUID_STRING_BUFLEN]; char *vmname = virAuditEncode("vm", vm->def->name); - const char *srcpath = virDomainChrSourceDefGetPath(&def->server.chr); + const char *srcpath = virDomainChrSourceDefGetPath(def->server.chr); const char *virt = virDomainAuditGetVirtType(vm->def); char *shmpath = NULL; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index da0c64b460..52f513f488 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3069,7 +3069,7 @@ void virDomainShmemDefFree(virDomainShmemDef *def) return; virDomainDeviceInfoClear(&def->info); - virDomainChrSourceDefClear(&def->server.chr); + virObjectUnref(def->server.chr); g_free(def->name); g_free(def); } @@ -13665,11 +13665,14 @@ virDomainShmemDefParseXML(virDomainXMLOption *xmlopt, if ((server = virXPathNode("./server[1]", ctxt))) { g_autofree char *tmp = NULL; + if (!(def->server.chr = virDomainChrSourceDefNew(xmlopt))) + return NULL; + def->server.enabled = true; - def->server.chr.type = VIR_DOMAIN_CHR_TYPE_UNIX; - def->server.chr.data.nix.listen = false; + def->server.chr->type = VIR_DOMAIN_CHR_TYPE_UNIX; + def->server.chr->data.nix.listen = false; if ((tmp = virXMLPropString(server, "path"))) - def->server.chr.data.nix.path = virFileSanitizePath(tmp); + def->server.chr->data.nix.path = virFileSanitizePath(tmp); } if ((msi = virXPathNode("./msi[1]", ctxt))) { @@ -16814,8 +16817,8 @@ virDomainShmemDefEquals(virDomainShmemDef *src, return false; if (src->server.enabled) { - if (STRNEQ_NULLABLE(src->server.chr.data.nix.path, - dst->server.chr.data.nix.path)) + if (STRNEQ_NULLABLE(src->server.chr->data.nix.path, + dst->server.chr->data.nix.path)) return false; } @@ -25868,7 +25871,7 @@ virDomainShmemDefFormat(virBuffer *buf, if (def->server.enabled) { virBufferAddLit(buf, "server.chr.data.nix.path); + virBufferEscapeString(buf, " path='%s'", def->server.chr->data.nix.path); virBufferAddLit(buf, "/>\n"); } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0ecd3803db..f222d8ca88 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1997,7 +1997,7 @@ struct _virDomainShmemDef { virDomainShmemRole role; struct { bool enabled; - virDomainChrSourceDef chr; + virDomainChrSourceDef *chr; } server; struct { bool enabled; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f97cdc70ab..60336947b5 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9368,7 +9368,7 @@ qemuBuildShmemCommandLine(virLogManager *logManager, if (shmem->server.enabled) { chardev = qemuBuildChrChardevStr(logManager, secManager, cmd, cfg, def, - &shmem->server.chr, + shmem->server.chr, shmem->info.alias, qemuCaps, cdevflags); if (!chardev) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index fb203bc830..e69215cee2 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9964,11 +9964,11 @@ void qemuDomainPrepareShmemChardev(virDomainShmemDef *shmem) { if (!shmem->server.enabled || - shmem->server.chr.data.nix.path) + shmem->server.chr->data.nix.path) return; - shmem->server.chr.data.nix.path = g_strdup_printf("/var/lib/libvirt/shmem-%s-sock", - shmem->name); + shmem->server.chr->data.nix.path = g_strdup_printf("/var/lib/libvirt/shmem-%s-sock", + shmem->name); } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 3df0a1f17a..0e798dc237 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3064,7 +3064,7 @@ qemuDomainAttachShmemDevice(virQEMUDriver *driver, qemuDomainObjEnterMonitor(driver, vm); if (shmem->server.enabled) { - if (qemuHotplugChardevAttach(priv->mon, charAlias, &shmem->server.chr) < 0) + if (qemuHotplugChardevAttach(priv->mon, charAlias, shmem->server.chr) < 0) goto exit_monitor; } else { if (qemuMonitorAddObject(priv->mon, &props, &memAlias) < 0) diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index 218e07bfb0..b7ffb5e2c3 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -1172,8 +1172,8 @@ get_files(vahControl * ctl) * When the server path is enabled, use it - otherwise fallback to * model dependent defaults. */ if (shmem->server.enabled && - shmem->server.chr.data.nix.path) { - if (vah_add_file(&buf, shmem->server.chr.data.nix.path, + shmem->server.chr->data.nix.path) { + if (vah_add_file(&buf, shmem->server.chr->data.nix.path, "rw") != 0) goto cleanup; } else {