From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Fioravante Subject: PATCH [base vtpm and libxl patches 3/6] Fix bugs in vtpm hotplug scripts Date: Fri, 21 Sep 2012 14:59:36 -0400 Message-ID: <505CB918.3030108@jhuapl.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5118848930475565357==" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell , "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a cryptographically signed message in MIME format. --===============5118848930475565357== Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms090205080600060307050201" This is a cryptographically signed message in MIME format. --------------ms090205080600060307050201 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable This patch fixes IO deadlocks in the vtpm hotplug scripts. Signed off by: Matthew Fioravante matthew.fioravante@jhuapl.edu --- Changed since previous: * rebased off of latest xen stable * replaced instances of gawk with awk diff --git a/tools/hotplug/Linux/vtpm b/tools/hotplug/Linux/vtpm --- a/tools/hotplug/Linux/vtpm +++ b/tools/hotplug/Linux/vtpm @@ -1,22 +1,18 @@ #!/bin/bash =20 +export PATH=3D$PATH:/usr/sbin:/sbin + dir=3D$(dirname "$0") . "$dir/vtpm-hotplug-common.sh" =20 -vtpm_fatal_error=3D0 - case "$command" in add) vtpm_create_instance + success ;; remove) vtpm_remove_instance + success ;; esac =20 -if [ $vtpm_fatal_error -eq 0 ]; then - log debug "Successful vTPM operation '$command'." - success -else - fatal "Error while executing vTPM operation '$command'." -fi diff --git a/tools/hotplug/Linux/vtpm-common.sh b/tools/hotplug/Linux/vtpm-common.sh --- a/tools/hotplug/Linux/vtpm-common.sh +++ b/tools/hotplug/Linux/vtpm-common.sh @@ -276,12 +276,10 @@ function vtpm_create_instance () { =20 vtpm_create $instance =20 - if [ $vtpm_fatal_error -eq 0 ]; then - if [ "$uuid" !=3D "" ]; then - vtpmdb_add_instance $uuid $instance - else - vtpmdb_add_instance $domname $instance - fi + if [ "$uuid" !=3D "" ]; then + vtpmdb_add_instance $uuid $instance + else + vtpmdb_add_instance $domname $instance fi else if [ "$reason" =3D=3D "resume" ]; then @@ -290,7 +288,6 @@ function vtpm_create_instance () { vtpm_start $instance fi fi - release_lock vtpmdb =20 xenstore_write $XENBUS_PATH/instance $instance @@ -322,8 +319,8 @@ function vtpm_remove_instance () { if [ "$instance" !=3D "0" ]; then vtpm_suspend $instance fi - release_lock vtpmdb + } =20 =20 diff --git a/tools/hotplug/Linux/vtpm-delete b/tools/hotplug/Linux/vtpm-delete --- a/tools/hotplug/Linux/vtpm-delete +++ b/tools/hotplug/Linux/vtpm-delete @@ -5,6 +5,8 @@ # or # vtpm-delete --vmname =20 +export PATH=3D$PATH:/usr/sbin:/sbin + dir=3D$(dirname "$0") . "$dir/vtpm-common.sh" =20 diff --git a/tools/hotplug/Linux/vtpm-impl b/tools/hotplug/Linux/vtpm-imp= l --- a/tools/hotplug/Linux/vtpm-impl +++ b/tools/hotplug/Linux/vtpm-impl @@ -32,14 +32,16 @@ # OF THE POSSIBILITY OF SUCH DAMAGE. # =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 -# | SRC | TAG | CMD SIZE | =20 ORD |mtype|strt -TPM_CMD_OPEN=3D\\x00\\x00\\x00\\x00\\x01\\xc1\\x00\\x00\\x00\\x11\\x01\\= x00\\x00\\x01\\x01\\x01 -TPM_CMD_RESM=3D\\x00\\x00\\x00\\x00\\x01\\xc1\\x00\\x00\\x00\\x11\\x01\\= x00\\x00\\x01\\x01\\x02 -TPM_CMD_CLOS=3D\\x00\\x00\\x00\\x00\\x01\\xc1\\x00\\x00\\x00\\x0e\\x01\\= x00\\x00\\x02 -TPM_CMD_DELE=3D\\x00\\x00\\x00\\x00\\x01\\xc1\\x00\\x00\\x00\\x0e\\x01\\= x00\\x00\\x03 +export PATH=3D$PATH:/usr/sbin:/sbin =20 -TPM_TYPE_PVM=3D\\x01 -TPM_TYPE_HVM=3D\\x02 +# | SRC |TAG| CMD SZ|| ORD |mtype|strt +TPM_CMD_OPEN=3D"0000000001C100000011010000010101" +TPM_CMD_RESM=3D"0000000001C100000011010000010102" +TPM_CMD_CLOS=3D"0000000001C10000000E01000002" +TPM_CMD_DELE=3D"0000000001C10000000E01000003" + +TPM_TYPE_PVM=3D01 +TPM_TYPE_HVM=3D02 =20 TPM_SUCCESS=3D00000000 =20 @@ -70,24 +72,19 @@ function vtpm_manager_cmd() { local inst=3D$2; local inst_bin=3D$(hex32_to_bin $inst); =20 - claim_lock vtpm_mgr - - #send cmd to vtpm_manager - printf "$cmd$inst_bin" > $TX_VTPM_MANAGER - - #recv response - set +e - local resp_hex=3D`dd skip=3D10 bs=3D1 count=3D4 if=3D$RX_VTPM_MANAGER 2= > /dev/null | xxd -ps` - set -e + local resp_hex + #send cmd to vtpm_manager and get response + if ! resp_hex=3D`echo "$cmd$(str_to_hex32 $inst)" | vtpmmgrtalk `; then= + release_lock vtpmdb + fatal "Error communicating with vTPM Manager" + fi =20 - release_lock vtpm_mgr + resp_hex=3D`echo $resp_hex | cut -b 21-` =20 #return whether the command was successful - if [ $resp_hex -ne $TPM_SUCCESS ]; then - vtpm_fatal_error=3D1 - false - else - true + if [ "$resp_hex" !=3D "$TPM_SUCCESS" ]; then + release_lock vtpmdb + fatal "vTPM Manager returned failure code $resp_hex" fi } =20 @@ -142,13 +139,8 @@ function vtpm_suspend() { =20 function vtpm_delete() { local inst=3D$1 - if $(vtpm_manager_cmd $TPM_CMD_DELE $inst); then - rm -f /var/vtpm/vtpm_dm_$1.data - true - else - vtpm_fatal_error=3D1 - false - fi + $(vtpm_manager_cmd $TPM_CMD_DELE $inst) + rm -f /var/vtpm/vtpm_dm_$1.data } =20 # Perform a migration step. This function differentiates between migrati= on diff --git a/tools/python/xen/xend/server/tpmif.py b/tools/python/xen/xend/server/tpmif.py --- a/tools/python/xen/xend/server/tpmif.py +++ b/tools/python/xen/xend/server/tpmif.py @@ -44,6 +44,22 @@ class TPMifController(DevController): DevController.__init__(self, vm) =20 =20 + def createDevice(self, config): + #Disable hotplug scripts if backend is not dom0 + import xen.xend.XendDomain + xd =3D xen.xend.XendDomain.instance() + backdom_name =3D config.get('backend') + if backdom_name is None: + backdom =3D xen.xend.XendDomain.DOM0_ID + else: + bd =3D xd.domain_lookup_nr(backdom_name) + backdom =3D bd.getDomid() + + if backdom !=3D xen.xend.XendDomain.DOM0_ID: + self.hotplug =3D False + + return DevController.createDevice(self, config) + def getDeviceDetails(self, config): """@see DevController.getDeviceDetails""" =20 --------------ms090205080600060307050201 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIDyjCC A8YwggMvoAMCAQICBD/xyf0wDQYJKoZIhvcNAQEFBQAwLzELMAkGA1UEBhMCVVMxDzANBgNV BAoTBkpIVUFQTDEPMA0GA1UECxMGQklTRENBMB4XDTEwMDYxMTE4MjIwNloXDTEzMDYxMTE4 NTIwNlowZjELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkpIVUFQTDEPMA0GA1UECxMGUGVvcGxl MTUwFgYDVQQLEw9WUE5Hcm91cC1CSVNEQ0EwGwYDVQQDExRNYXR0aGV3IEUgRmlvcmF2YW50 ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAnpbwVSP6o1Nb5lcW7dd3yTo9iBJdi7qz 4nANOMFPK7JOy5npKN1iiousl28U/scUJES55gPwAWYJK3uVyQAsA4adgDKi5DoD1UHDQEwp bY7iHLJeq0NPr4BqYNqnCFPbE6HC8zSJrr4qKn+gVUQT39SIFqdiIPJwZL8FYTRQ/zsCAwEA AaOCAbYwggGyMAsGA1UdDwQEAwIHgDArBgNVHRAEJDAigA8yMDEwMDYxMTE4MjIwNlqBDzIw MTIwNzE3MjI1MjA2WjAbBg0rBgEEAbMlCwMBAQEBBAoWCGZpb3JhbWUxMBsGDSsGAQQBsyUL AwEBAQIEChIIMDAxMDQyNjEwWAYJYIZIAYb6ax4BBEsMSVRoZSBwcml2YXRlIGtleSBjb3Jy ZXNwb25kaW5nIHRvIHRoaXMgY2VydGlmaWNhdGUgbWF5IGhhdmUgYmVlbiBleHBvcnRlZC4w KAYDVR0RBCEwH4EdTWF0dGhldy5GaW9yYXZhbnRlQGpodWFwbC5lZHUwUgYDVR0fBEswSTBH oEWgQ6RBMD8xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNVBAsTBkJJU0RD QTEOMAwGA1UEAxMFQ1JMNTYwHwYDVR0jBBgwFoAUCDUpmxH52EU2CyWmF2EJMB1yqeswHQYD VR0OBBYEFO6LYxg6r9wHZ+zdQtBHn1dZ/YTNMAkGA1UdEwQCMAAwGQYJKoZIhvZ9B0EABAww ChsEVjcuMQMCBLAwDQYJKoZIhvcNAQEFBQADgYEAJO9HQh4YNChVLzuZqK5ARJARD8JoujGZ fdo75quvg2jXFQe2sEjvLnxJZgm/pv8fdZakq48CWwjYHKuvIp7sDjTEsQfo+y7SpN/N2NvJ WU5SqfK1VgYtNLRRoGJUB5Q1aZ+Dg95g3kqpyfpUMISJL8IKVLtJVfN4fggFVUYZ9wwxggGr MIIBpwIBATA3MC8xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNVBAsTBkJJ U0RDQQIEP/HJ/TAJBgUrDgMCGgUAoIHLMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ KoZIhvcNAQkFMQ8XDTEyMDkyMTE4NTkzNlowIwYJKoZIhvcNAQkEMRYEFNS9Wbkgqt0VdTVF PqBElVCCXpG3MGwGCSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAK BggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYI KoZIhvcNAwICASgwDQYJKoZIhvcNAQEBBQAEgYBSEJrzcNkRMXqnsnuPA4b0cZIGe8anovqS Lw5pcBa66gao51yCLr6dNDmd+y9b23PDSdot2ONLuvjJ+L/54oNGU52WxVMu5ckKIRFY8UwF ndDB+2OvubpiYtkW/AMCLU9LDMTIkOhWlQQDTAWhgHi2xfD7XgVEVCb5dQHesPf56QAAAAAA AA== --------------ms090205080600060307050201-- --===============5118848930475565357== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============5118848930475565357==--