From 1d96440a060869fb4c26ce35fe165e6e68168885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Thu, 9 May 2013 12:33:11 +0200 Subject: [PATCH] conf: don't crash on a tpm device with no backends Print an error instead of crashing when a TPM device without a backend is specified. Add a test for tpm device with no backend, which should fail with a parse error. https://bugzilla.redhat.com/show_bug.cgi?id=961252 --- src/conf/domain_conf.c | 6 +++++ .../qemuxml2argv-tpm-no-backend-invalid.xml | 27 +++++++++++++++++++ tests/qemuxml2argvtest.c | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-tpm-no-backend-invalid.xml diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 6b71727043..b7e253e450 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6988,6 +6988,12 @@ virDomainTPMDefParseXML(const xmlNodePtr node, goto error; } + if (nbackends == 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing TPM device backend")); + goto error; + } + if (!(backend = virXMLPropString(backends[0], "type"))) { virReportError(VIR_ERR_XML_ERROR, "%s", _("missing TPM device backend type")); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-tpm-no-backend-invalid.xml b/tests/qemuxml2argvdata/qemuxml2argv-tpm-no-backend-invalid.xml new file mode 100644 index 0000000000..3b17ff7542 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-tpm-no-backend-invalid.xml @@ -0,0 +1,27 @@ + + TPM-VM + 11d7cd22-da89-3094-6212-079a48a309a1 + 2097152 + 512288 + 1 + + hvm + + + + + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 128627308e..b1bf9dbc2a 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -970,6 +970,8 @@ mymain(void) DO_TEST("tpm-passthrough", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS); + DO_TEST_PARSE_ERROR("tpm-no-backend-invalid", QEMU_CAPS_DEVICE, + QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS); DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE); DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);