diff options
-rw-r--r-- | tools/examples/vtpm-common.sh | 48 | ||||
-rw-r--r-- | tools/python/xen/xend/XendDevices.py | 3 | ||||
-rw-r--r-- | tools/python/xen/xend/server/tpmif.py | 5 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/01_vtpm-list_pos.py | 8 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py | 9 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/03_vtpm-susp_res.py | 16 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/04_vtpm-loc_migr.py | 15 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/05_vtpm-loc_migr.py | 15 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/06_vtpm-susp_res_pcrs.py | 20 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/07_vtpm-mig_pcrs.py | 19 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/08_vtpm-mig_pcrs.py | 19 | ||||
-rw-r--r-- | tools/xm-test/tests/vtpm/vtpm_utils.py | 14 |
12 files changed, 77 insertions, 114 deletions
diff --git a/tools/examples/vtpm-common.sh b/tools/examples/vtpm-common.sh index 8af4f321e9..7f8512e72f 100644 --- a/tools/examples/vtpm-common.sh +++ b/tools/examples/vtpm-common.sh @@ -20,7 +20,7 @@ dir=$(dirname "$0") . "$dir/logging.sh" . "$dir/locking.sh" -VTPMDB="/etc/xen/vtpm.db" +VTPMDB="/var/vtpm/vtpm.db" #In the vtpm-impl file some commands should be defined: # vtpm_create, vtpm_setup, vtpm_start, etc. (see below) @@ -241,12 +241,21 @@ function vtpm_get_create_reason () { # If no entry in the TPM database is found, the instance is # created and an entry added to the database. function vtpm_create_instance () { - local res instance domname reason - domname=$(xenstore_read "$XENBUS_PATH"/domain) + local res instance domname reason uuid + uuid=$(xenstore_read "$XENBUS_PATH"/uuid) reason=$(vtpm_get_create_reason) claim_lock vtpmdb - instance=$(vtpmdb_find_instance $domname) + + instance="0" + + if [ "$uuid" != "" ]; then + instance=$(vtpmdb_find_instance $uuid) + fi + if [ "$instance" == "0" ]; then + domname=$(xenstore_read "$XENBUS_PATH"/domain) + instance=$(vtpmdb_find_instance $domname) + fi if [ "$instance" == "0" -a "$reason" != "create" ]; then release_lock vtpmdb @@ -268,7 +277,11 @@ function vtpm_create_instance () { vtpm_create $instance if [ $vtpm_fatal_error -eq 0 ]; then - vtpmdb_add_instance $domname $instance + if [ "$uuid" != "" ]; then + vtpmdb_add_instance $uuid $instance + else + vtpmdb_add_instance $domname $instance + fi fi else if [ "$reason" == "resume" ]; then @@ -288,22 +301,29 @@ function vtpm_create_instance () { #Since it is assumed that the VM will appear again, the #entry is kept in the VTPMDB file. function vtpm_remove_instance () { - local instance reason domname + local instance reason domname uuid #Stop script execution quietly if path does not exist (anymore) xenstore-exists "$XENBUS_PATH"/domain - domname=$(xenstore_read "$XENBUS_PATH"/domain) + uuid=$(xenstore_read "$XENBUS_PATH"/uuid) - if [ "$domname" != "" ]; then - claim_lock vtpmdb + claim_lock vtpmdb - instance=$(vtpmdb_find_instance $domname) + instance="0" - if [ "$instance" != "0" ]; then - vtpm_suspend $instance - fi + if [ "$uuid != "" ]; then + instance=$(vtpmdb_find_instance $uuid) + fi - release_lock vtpmdb + if [ "$instance == "0" ]; then + domname=$(xenstore_read "$XENBUS_PATH"/domain) + instance=$(vtpmdb_find_instance $domname) fi + + if [ "$instance" != "0" ]; then + vtpm_suspend $instance + fi + + release_lock vtpmdb } diff --git a/tools/python/xen/xend/XendDevices.py b/tools/python/xen/xend/XendDevices.py index d4404a7aaa..70557855a1 100644 --- a/tools/python/xen/xend/XendDevices.py +++ b/tools/python/xen/xend/XendDevices.py @@ -78,6 +78,7 @@ class XendDevices: @param domain: domain this controller is handling devices for. @type domain: XendDomainInfo """ - tpmif.destroy_vtpmstate(domain.getName()) + from xen.xend.XendLogging import log + tpmif.destroy_vtpmstate(domain.info.get('vtpm_refs')) destroy_device_state = classmethod(destroy_device_state) diff --git a/tools/python/xen/xend/server/tpmif.py b/tools/python/xen/xend/server/tpmif.py index b977110a43..db4b9f2c68 100644 --- a/tools/python/xen/xend/server/tpmif.py +++ b/tools/python/xen/xend/server/tpmif.py @@ -31,9 +31,10 @@ import re xoptions = XendOptions.instance() -def destroy_vtpmstate(name): +def destroy_vtpmstate(uuids): if os.path.exists(VTPM_DELETE_SCRIPT): - os.system(VTPM_DELETE_SCRIPT + " " + name) + for uuid in uuids: + os.system(VTPM_DELETE_SCRIPT + " " + uuid) class TPMifController(DevController): """TPM interface controller. Handles all TPM devices for a domain. diff --git a/tools/xm-test/tests/vtpm/01_vtpm-list_pos.py b/tools/xm-test/tests/vtpm/01_vtpm-list_pos.py index a427bf2fde..dfd1227a00 100644 --- a/tools/xm-test/tests/vtpm/01_vtpm-list_pos.py +++ b/tools/xm-test/tests/vtpm/01_vtpm-list_pos.py @@ -11,6 +11,7 @@ from XmTestLib import * from vtpm_utils import * import commands import os +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -23,18 +24,17 @@ except DomainError, e: vtpm_cleanup(domain.getName()) FAIL("Unable to create domain") + domName = domain.getName() +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + status, output = traceCommand("xm vtpm-list %s" % domain.getId()) eyecatcher = "/local/domain/0/backend/vtpm" where = output.find(eyecatcher) if status != 0: - vtpm_cleanup(domName) FAIL("xm vtpm-list returned bad status, expected 0, status is %i" % status) elif where < 0: - vtpm_cleanup(domName) FAIL("Fail to list virtual TPM device") domain.stop() - -vtpm_cleanup(domName) diff --git a/tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py b/tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py index 62ecfb86bd..a18cbab2f7 100644 --- a/tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py +++ b/tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py @@ -11,6 +11,7 @@ from vtpm_utils import * import commands import os import os.path +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -21,32 +22,28 @@ try: except DomainError, e: if verbose: print e.extra - vtpm_cleanup(domName) FAIL("Unable to create domain (%s)" % domName) +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + try: console.sendInput("input") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") domain.closeConsole() domain.stop() -vtpm_cleanup(domName) - if not re.search("PCR-00:",run["output"]): FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side") diff --git a/tools/xm-test/tests/vtpm/03_vtpm-susp_res.py b/tools/xm-test/tests/vtpm/03_vtpm-susp_res.py index 4740cdef18..b863f27494 100644 --- a/tools/xm-test/tests/vtpm/03_vtpm-susp_res.py +++ b/tools/xm-test/tests/vtpm/03_vtpm-susp_res.py @@ -12,6 +12,7 @@ from vtpm_utils import * import commands import os import os.path +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -23,25 +24,23 @@ try: except DomainError, e: if verbose: print e.extra - vtpm_cleanup(domName) FAIL("Unable to create domain (%s)" % domName) +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + try: console.sendInput("input") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") consoleHistory = console.getHistory() @@ -56,12 +55,10 @@ while loop < 3: except TimeoutError, e: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm save did not succeed") try: @@ -71,32 +68,27 @@ while loop < 3: except TimeoutError, e: os.remove("%s.save" % domName) saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) os.remove("%s.save" % domName) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm restore did not succeed") try: console = domain.getConsole() except ConsoleError, e: - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side") loop += 1 @@ -105,5 +97,3 @@ domain.closeConsole() domain.stop() -vtpm_cleanup(domName) - diff --git a/tools/xm-test/tests/vtpm/04_vtpm-loc_migr.py b/tools/xm-test/tests/vtpm/04_vtpm-loc_migr.py index 0a2f32cb53..ccc8b73782 100644 --- a/tools/xm-test/tests/vtpm/04_vtpm-loc_migr.py +++ b/tools/xm-test/tests/vtpm/04_vtpm-loc_migr.py @@ -13,6 +13,7 @@ from vtpm_utils import * import commands import os import os.path +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -24,25 +25,23 @@ try: except DomainError, e: if verbose: print e.extra - vtpm_cleanup(domName) FAIL("Unable to create domain (%s)" % domName) +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + try: console.sendInput("input") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") consoleHistory = console.getHistory() @@ -58,12 +57,10 @@ while loop < 3: timeout=90) except TimeoutError, e: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm migrate did not succeed. External device migration activated?") @@ -71,26 +68,22 @@ while loop < 3: new_domid = domid(domName) if (old_domid == new_domid): - vtpm_cleanup(domName) FAIL("xm migrate failed, domain id is still %s (loop=%d)" % (old_domid,loop)) try: console = domain.getConsole() except ConsoleError, e: - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side") loop += 1 @@ -98,5 +91,3 @@ while loop < 3: domain.closeConsole() domain.stop() - -vtpm_cleanup(domName) diff --git a/tools/xm-test/tests/vtpm/05_vtpm-loc_migr.py b/tools/xm-test/tests/vtpm/05_vtpm-loc_migr.py index 14102c7331..57b87dfda8 100644 --- a/tools/xm-test/tests/vtpm/05_vtpm-loc_migr.py +++ b/tools/xm-test/tests/vtpm/05_vtpm-loc_migr.py @@ -13,6 +13,7 @@ from vtpm_utils import * import commands import os import os.path +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -24,25 +25,23 @@ try: except DomainError, e: if verbose: print e.extra - vtpm_cleanup(domName) FAIL("Unable to create domain (%s)" % domName) +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + try: console.sendInput("input") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") consoleHistory = console.getHistory() @@ -58,12 +57,10 @@ while loop < 3: timeout=90) except TimeoutError, e: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm migrate did not succeed. External device migration activated?") @@ -71,26 +68,22 @@ while loop < 3: new_domid = domid(domName) if (old_domid == new_domid): - vtpm_cleanup(domName) FAIL("xm migrate failed, domain id is still %s (loop=%d)" % (old_domid,loop)) try: console = domain.getConsole() except ConsoleError, e: - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side") loop += 1 @@ -98,5 +91,3 @@ while loop < 3: domain.closeConsole() domain.stop() - -vtpm_cleanup(domName) diff --git a/tools/xm-test/tests/vtpm/06_vtpm-susp_res_pcrs.py b/tools/xm-test/tests/vtpm/06_vtpm-susp_res_pcrs.py index 77a216cf16..c70691d8e7 100644 --- a/tools/xm-test/tests/vtpm/06_vtpm-susp_res_pcrs.py +++ b/tools/xm-test/tests/vtpm/06_vtpm-susp_res_pcrs.py @@ -13,6 +13,7 @@ from vtpm_utils import * import commands import os import os.path +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -24,45 +25,40 @@ try: except DomainError, e: if verbose: print e.extra - vtpm_cleanup(domName) FAIL("Unable to create domain (%s)" % domName) +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + try: console.sendInput("input") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("mknod /dev/tpm0 c 10 224") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Error while creating /dev/tpm0") try: run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Error while extending PCR 0") try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"]) if not re.search("PCR-00: 1E A7 BD",run["output"]): @@ -81,12 +77,10 @@ while loop < 3: except TimeoutError, e: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm save did not succeed") try: @@ -96,37 +90,31 @@ while loop < 3: except TimeoutError, e: os.remove("%s.save" % domName) saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) os.remove("%s.save" % domName) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm restore did not succeed") try: console = domain.getConsole() except ConsoleError, e: - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side") if not re.search("PCR-00: 1E A7 BD",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"]) loop += 1 @@ -135,5 +123,3 @@ domain.closeConsole() domain.stop() -vtpm_cleanup(domName) - diff --git a/tools/xm-test/tests/vtpm/07_vtpm-mig_pcrs.py b/tools/xm-test/tests/vtpm/07_vtpm-mig_pcrs.py index 0f59677f7d..4ff33600a0 100644 --- a/tools/xm-test/tests/vtpm/07_vtpm-mig_pcrs.py +++ b/tools/xm-test/tests/vtpm/07_vtpm-mig_pcrs.py @@ -14,6 +14,7 @@ from vtpm_utils import * import commands import os import os.path +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -25,45 +26,40 @@ try: except DomainError, e: if verbose: print e.extra - vtpm_cleanup(domName) FAIL("Unable to create domain (%s)" % domName) +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + try: console.sendInput("input") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("mknod /dev/tpm0 c 10 224") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Error while creating /dev/tpm0") try: run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Error while extending PCR 0") try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"]) if not re.search("PCR-00: 1E A7 BD",run["output"]): @@ -83,12 +79,10 @@ while loop < 3: timeout=90) except TimeoutError, e: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm migrate did not succeed. External device migration activated?") @@ -96,31 +90,26 @@ while loop < 3: new_domid = domid(domName) if (old_domid == new_domid): - vtpm_cleanup(domName) FAIL("xm migrate failed, domain id is still %s (loop=%d)" % (old_domid,loop)) try: console = domain.getConsole() except ConsoleError, e: - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side") if not re.search("PCR-00: 1E A7 BD",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"]) loop += 1 @@ -128,5 +117,3 @@ while loop < 3: domain.closeConsole() domain.stop() - -vtpm_cleanup(domName) diff --git a/tools/xm-test/tests/vtpm/08_vtpm-mig_pcrs.py b/tools/xm-test/tests/vtpm/08_vtpm-mig_pcrs.py index 2061992f64..27125fca44 100644 --- a/tools/xm-test/tests/vtpm/08_vtpm-mig_pcrs.py +++ b/tools/xm-test/tests/vtpm/08_vtpm-mig_pcrs.py @@ -14,6 +14,7 @@ from vtpm_utils import * import commands import os import os.path +import atexit config = {"vtpm":"instance=1,backend=0"} domain = XmTestDomain(extraConfig=config) @@ -25,45 +26,40 @@ try: except DomainError, e: if verbose: print e.extra - vtpm_cleanup(domName) FAIL("Unable to create domain (%s)" % domName) +atexit.register(vtpm_cleanup, vtpm_get_uuid(domid(domName))) + try: console.sendInput("input") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("mknod /dev/tpm0 c 10 224") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Error while creating /dev/tpm0") try: run = console.runCmd("echo -ne \"\\x00\\xc1\\x00\\x00\\x00\\x22\\x00\\x00\\x00\\x14\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\0xf\\x10\\x11\\x12\\x13\\x14\" > seq; cat seq > /dev/tpm0") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Error while extending PCR 0") try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if re.search("No such file",run["output"]): - vtpm_cleanup(domName) FAIL("TPM frontend support not compiled into (domU?) kernel") if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side: \n%s" % run["output"]) if not re.search("PCR-00: 1E A7 BD",run["output"]): @@ -83,12 +79,10 @@ while loop < 3: timeout=90) except TimeoutError, e: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL(str(e)) if status != 0: saveLog(consoleHistory) - vtpm_cleanup(domName) FAIL("xm migrate did not succeed. External device migration activated?") @@ -96,31 +90,26 @@ while loop < 3: new_domid = domid(domName) if (old_domid == new_domid): - vtpm_cleanup(domName) FAIL("xm migrate failed, domain id is still %s (loop=%d)" % (old_domid,loop)) try: console = domain.getConsole() except ConsoleError, e: - vtpm_cleanup(domName) FAIL(str(e)) try: run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs") except ConsoleError, e: saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("No result from dumping the PCRs") if not re.search("PCR-00:",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side") if not re.search("PCR-00: 1E A7 BD",run["output"]): saveLog(console.getHistory()) - vtpm_cleanup(domName) FAIL("Virtual TPM lost PCR 0 value: \n%s" % run["output"]) loop += 1 @@ -128,5 +117,3 @@ while loop < 3: domain.closeConsole() domain.stop() - -vtpm_cleanup(domName) diff --git a/tools/xm-test/tests/vtpm/vtpm_utils.py b/tools/xm-test/tests/vtpm/vtpm_utils.py index da65aab5fb..4e5b281bb8 100644 --- a/tools/xm-test/tests/vtpm/vtpm_utils.py +++ b/tools/xm-test/tests/vtpm/vtpm_utils.py @@ -15,4 +15,16 @@ if output == "": "need /dev/tpm0") def vtpm_cleanup(domName): - traceCommand("/etc/xen/scripts/vtpm-delete %s" % domName) + traceCommand("/etc/xen/scripts/vtpm-delete " + "`xenstore-read /local/domain/0/backend/vtpm/%s/0/uuid`" % + str(domid(domName))) + +def vtpm_cleanup(uuid): + from xen.xm import main + if main.serverType != main.SERVER_XEN_API: + traceCommand("/etc/xen/scripts/vtpm-delete %s" % uuid) + +def vtpm_get_uuid(domainid): + s, o = traceCommand("xenstore-read " + "/local/domain/0/backend/vtpm/%s/0/uuid" % domainid) + return o |