File CVE-2010-223x-0009.patch of Package libvirt
>From f087f0656f882be305783e24d55921b57fbbcb97 Mon Sep 17 00:00:00 2001
From: Daniel P. Berrange <berrange@redhat.com>
Date: Mon, 14 Jun 2010 16:08:55 +0100
Subject: [PATCH 09/10] Add ability to set a default driver name/type when parsing disks
Record a default driver name/type in capabilities struct. Use this
when parsing disks if value is not set in XML config.
* src/conf/capabilities.h: Record default driver name/type for disks
* src/conf/domain_conf.c: Fallback to default driver name/type
when parsing disks
* src/qemu/qemu_driver.c: Set default driver name/type to raw
---
src/conf/capabilities.h | 2 ++
src/conf/domain_conf.c | 21 ++++++++++++++++++---
src/qemu/qemu_driver.c | 8 ++++++++
3 files changed, 28 insertions(+), 3 deletions(-)
Index: libvirt-0.7.2/src/conf/capabilities.h
===================================================================
--- libvirt-0.7.2.orig/src/conf/capabilities.h
+++ libvirt-0.7.2/src/conf/capabilities.h
@@ -115,6 +115,8 @@ struct _virCaps {
virCapsGuestPtr *guests;
unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
unsigned int emulatorRequired : 1;
+ const char *defaultDiskDriverName;
+ const char *defaultDiskDriverType;
};
Index: libvirt-0.7.2/src/conf/domain_conf.c
===================================================================
--- libvirt-0.7.2.orig/src/conf/domain_conf.c
+++ libvirt-0.7.2/src/conf/domain_conf.c
@@ -642,6 +642,7 @@ void virDomainRemoveInactive(virDomainOb
*/
static virDomainDiskDefPtr
virDomainDiskDefParseXML(virConnectPtr conn,
+ virCapsPtr caps,
xmlNodePtr node,
int flags) {
virDomainDiskDefPtr def;
@@ -846,6 +847,16 @@ virDomainDiskDefParseXML(virConnectPtr c
def->serial = serial;
serial = NULL;
+ if (!def->driverType &&
+ caps->defaultDiskDriverType &&
+ !(def->driverType = strdup(caps->defaultDiskDriverType)))
+ goto no_memory;
+
+ if (!def->driverName &&
+ caps->defaultDiskDriverName &&
+ !(def->driverName = strdup(caps->defaultDiskDriverName)))
+ goto no_memory;
+
cleanup:
VIR_FREE(bus);
VIR_FREE(type);
@@ -861,6 +872,9 @@ cleanup:
return def;
+no_memory:
+ virReportOOMError(conn);
+
error:
virDomainDiskDefFree(def);
def = NULL;
@@ -2347,7 +2361,7 @@ virDomainDeviceDefPtr virDomainDeviceDef
if (xmlStrEqual(node->name, BAD_CAST "disk")) {
dev->type = VIR_DOMAIN_DEVICE_DISK;
- if (!(dev->data.disk = virDomainDiskDefParseXML(conn, node, flags)))
+ if (!(dev->data.disk = virDomainDiskDefParseXML(conn, caps, node, flags)))
goto error;
} else if (xmlStrEqual(node->name, BAD_CAST "filesystem")) {
dev->type = VIR_DOMAIN_DEVICE_FS;
@@ -2752,6 +2766,7 @@ static virDomainDefPtr virDomainDefParse
goto no_memory;
for (i = 0 ; i < n ; i++) {
virDomainDiskDefPtr disk = virDomainDiskDefParseXML(conn,
+ caps,
nodes[i],
flags);
if (!disk)
Index: libvirt-0.7.2/src/qemu/qemu_driver.c
===================================================================
--- libvirt-0.7.2.orig/src/qemu/qemu_driver.c
+++ libvirt-0.7.2/src/qemu/qemu_driver.c
@@ -2453,6 +2453,14 @@ static char *qemudGetCapabilities(virCon
goto cleanup;
}
+ if (driver->allowDiskFormatProbing) {
+ caps->defaultDiskDriverName = NULL;
+ caps->defaultDiskDriverType = NULL;
+ } else {
+ caps->defaultDiskDriverName = "qemu";
+ caps->defaultDiskDriverType = "raw";
+ }
+
if (qemu_driver->securityDriver &&
qemudSecurityCapsInit(qemu_driver->securityDriver, caps) < 0) {
virCapabilitiesFree(caps);