From: Matthew Fioravante Subject: [PATCH vtpm_manager 2/2] Fixes to vtpm hotplug scripts Date: Mon, 17 Sep 2012 17:19:48 -0400 Message-ID: <505793F4.40301@jhuapl.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2116482348316400441==" 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. --===============2116482348316400441== Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms010201030809000204000104" This is a cryptographically signed message in MIME format. --------------ms010201030809000204000104 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 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 @@ -98,7 +98,7 @@ function vtpmdb_is_free_instancenum () { avail=3D0 else instances=3D$(cat $VTPMDB | \ - awk \ + gawk \ '{ \ if (1 !=3D index($1,"#")) { \ printf("%s ",$2); \ @@ -120,7 +120,7 @@ function vtpmdb_is_free_instancenum () { function vtpmdb_get_free_instancenum () { local ctr instances don found instances=3D$(cat $VTPMDB | \ - awk \ + gawk \ '{ \ if (1 !=3D index($1,"#")) { \ printf("%s ",$2); \ @@ -174,7 +174,7 @@ function vtpmdb_validate_entry () { inst=3D$2 =20 res=3D$(cat $VTPMDB | \ - awk -vvmname=3D$vmname \ + gawk -vvmname=3D$vmname \ -vinst=3D$inst \ '{ \ if ( 1 =3D=3D index($1,"#")) {\ @@ -209,7 +209,7 @@ function vtpmdb_remove_entry () { VTPMDB_TMP=3D"$VTPMDB".tmp =20 $(cat $VTPMDB | \ - awk -vvmname=3D$vmname \ + gawk -vvmname=3D$vmname \ '{ \ if ( $1 !=3D vmname ) { \ print $0; \ @@ -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 @@ -350,13 +347,13 @@ function vtpm_delete_instance () { function vtpm_isLocalAddress() { local addr res addr=3D$(ping $1 -c 1 | \ - awk '{ print substr($3,2,length($3)-2); exit }') + gawk '{ print substr($3,2,length($3)-2); exit }') if [ "$addr" =3D=3D "" ]; then echo "-1" return fi res=3D$(ifconfig | grep "inet addr" | \ - awk -vaddr=3D$addr \ + gawk -vaddr=3D$addr \ '{ \ if ( addr =3D=3D substr($2, 6)) {\ print "1"; \ 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 --------------ms010201030809000204000104 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 KoZIhvcNAQkFMQ8XDTEyMDkxNzIxMTk0OFowIwYJKoZIhvcNAQkEMRYEFEiI92OoqoMbnwli 7ye/HVuYwcrYMGwGCSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAK BggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYI KoZIhvcNAwICASgwDQYJKoZIhvcNAQEBBQAEgYCHbn22opsgN8e5dPQjcuADsn9KAX9FbZy+ FdksgvxBFlJGsjIj5KO+E9a3wNpDHy5kkMFsLxU1MKE7LscRbSQyl37qofj+OfubdeXjJc52 DbGGMYw9bIlfP6LuKJTBpnZSZCqjb5DO+UG9zyBv9wRIFjrSMn0Y1YDxGNYGRAw4JwAAAAAA AA== --------------ms010201030809000204000104-- --===============2116482348316400441== 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 --===============2116482348316400441==--