From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Fioravante Subject: [PATCH 8/12] VTPM mini-os: vtpm hotplug fixes Date: Fri, 11 Mar 2011 18:03:03 -0500 Message-ID: <4D7AAA27.10306@jhuapl.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0541479166==" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a cryptographically signed message in MIME format. --===============0541479166== Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms010106000202050500090505" This is a cryptographically signed message in MIME format. --------------ms010106000202050500090505 Content-Type: multipart/mixed; boundary="------------060209080308010906010409" This is a multi-part message in MIME format. --------------060209080308010906010409 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable This patch provides several bug fixes to the vtpm hotplug scripts that=20 run in dom0. Previously there were many different cases that would cause = them to either crash or hang. Mishandled lock files and improperly used=20 ipc were the culprits. With this patch the hotplug code uses the vtpmmgrtalk program (included=20 in the last patch) to talk to the vtpm manager and determine if it is=20 running and ready to receive commands. With this patch and the previous vtpm_manager patch the tradition vtpm=20 implementation in xen is very stable and usable. Signed off by: Matthew Fioravante --------------060209080308010906010409 Content-Type: text/x-patch; name="8-hotplug.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="8-hotplug.patch" diff -Naur xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm xen-uns= table-trp-sdp/tools/hotplug/Linux/vtpm --- xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm 2011-02-23 14:= 47:26.000000000 -0500 +++ xen-unstable-trp-sdp/tools/hotplug/Linux/vtpm 2011-02-23 14:42:11.000= 000000 -0500 @@ -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 -Naur xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm-common.= sh xen-unstable-trp-sdp/tools/hotplug/Linux/vtpm-common.sh --- xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm-common.sh 2011= -02-23 14:47:26.000000000 -0500 +++ xen-unstable-trp-sdp/tools/hotplug/Linux/vtpm-common.sh 2011-02-23 14= :42:11.000000000 -0500 @@ -98,7 +98,7 @@ avail=3D0 else instances=3D$(cat $VTPMDB | \ - awk \ + gawk \ '{ \ if (1 !=3D index($1,"#")) { \ printf("%s ",$2); \ @@ -120,7 +120,7 @@ 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 @@ 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 @@ 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 @@ =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 @@ vtpm_start $instance fi fi - release_lock vtpmdb =20 xenstore_write $XENBUS_PATH/instance $instance @@ -322,8 +319,8 @@ if [ "$instance" !=3D "0" ]; then vtpm_suspend $instance fi - release_lock vtpmdb + } =20 =20 @@ -350,13 +347,13 @@ 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 -Naur xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm-delete = xen-unstable-trp-sdp/tools/hotplug/Linux/vtpm-delete --- xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm-delete 2011-02= -23 14:47:26.000000000 -0500 +++ xen-unstable-trp-sdp/tools/hotplug/Linux/vtpm-delete 2011-02-23 14:42= :11.000000000 -0500 @@ -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 -Naur xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm-impl xe= n-unstable-trp-sdp/tools/hotplug/Linux/vtpm-impl --- xen-unstable-trp-sdp-pristine/tools/hotplug/Linux/vtpm-impl 2011-02-2= 3 14:47:26.000000000 -0500 +++ xen-unstable-trp-sdp/tools/hotplug/Linux/vtpm-impl 2011-02-23 14:42:1= 1.000000000 -0500 @@ -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 | = 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 @@ 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 @@ =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=20 - 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 -Naur xen-unstable-trp-sdp-pristine/tools/python/xen/xend/server/tpm= if.py xen-unstable-trp-sdp/tools/python/xen/xend/server/tpmif.py --- xen-unstable-trp-sdp-pristine/tools/python/xen/xend/server/tpmif.py 2= 011-02-23 14:47:26.000000000 -0500 +++ xen-unstable-trp-sdp/tools/python/xen/xend/server/tpmif.py 2011-02-23= 19:40:48.000000000 -0500 @@ -44,6 +44,22 @@ 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 --------------060209080308010906010409-- --------------ms010106000202050500090505 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIHZzCC A5kwggMCoAMCAQICBD/xkcEwDQYJKoZIhvcNAQEFBQAwLzELMAkGA1UEBhMCVVMxDzANBgNV BAoTBkpIVUFQTDEPMA0GA1UECxMGQklTRENBMB4XDTA5MDcxNzE1MDgwOVoXDTEyMDcxNzE1 MzgwOVowZjELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkpIVUFQTDEPMA0GA1UECxMGUGVvcGxl MTUwFgYDVQQLEw9WUE5Hcm91cC1CSVNEQ0EwGwYDVQQDExRNYXR0aGV3IEUgRmlvcmF2YW50 ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyzeGk9zPA33fsB3uvk/Izs9GGHCpHI8b zXdBIVg6++S+jK53PoaWgmtSLr/c732ea1zPR6ACymwAWON+U5rB+VJAUZ4l/p0T3LZjE1Kq nbQJ+pgb+WAmBtdrxrtky61E9HD8dO70x37+ejhunpF9OuSU5MnOPmMx6ranvahUsOsCAwEA AaOCAYkwggGFMAsGA1UdDwQEAwIFIDAbBg0rBgEEAbMlCwMBAQEBBAoWCGZpb3JhbWUxMBsG DSsGAQQBsyULAwEBAQIEChIIMDAxMDQyNjEwWAYJYIZIAYb6ax4BBEsMSVRoZSBwcml2YXRl IGtleSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgY2VydGlmaWNhdGUgbWF5IGhhdmUgYmVlbiBl eHBvcnRlZC4wKAYDVR0RBCEwH4EdTWF0dGhldy5GaW9yYXZhbnRlQGpodWFwbC5lZHUwUgYD VR0fBEswSTBHoEWgQ6RBMD8xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNV BAsTBkJJU0RDQTEOMAwGA1UEAxMFQ1JMNDkwHwYDVR0jBBgwFoAUCDUpmxH52EU2CyWmF2EJ MB1yqeswHQYDVR0OBBYEFO3ziReJlElP3ilaLQ5gwsg0RlgoMAkGA1UdEwQCMAAwGQYJKoZI hvZ9B0EABAwwChsEVjcuMQMCBLAwDQYJKoZIhvcNAQEFBQADgYEAMOY3Zf6gx3gv/fDd11cz h2Daj+8NExx/2Le3c88gfDVhPVgVX5S52EjeFbK5yVP0Xlm82vRADO47dTA2PKbpp50rJcAZ rl5bg5tQ/WbLAaRITCtOJWVVKXD9V7X2o3Z/IM2op3hb4mmDXSDS+Hzn0Jd2mAXl4iHPfI0p XlXqA9QwggPGMIIDL6ADAgECAgQ/8cn9MA0GCSqGSIb3DQEBBQUAMC8xCzAJBgNVBAYTAlVT MQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNVBAsTBkJJU0RDQTAeFw0xMDA2MTExODIyMDZaFw0x MzA2MTExODUyMDZaMGYxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNVBAsT BlBlb3BsZTE1MBYGA1UECxMPVlBOR3JvdXAtQklTRENBMBsGA1UEAxMUTWF0dGhldyBFIEZp b3JhdmFudGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJ6W8FUj+qNTW+ZXFu3Xd8k6 PYgSXYu6s+JwDTjBTyuyTsuZ6SjdYoqLrJdvFP7HFCREueYD8AFmCSt7lckALAOGnYAyouQ6 A9VBw0BMKW2O4hyyXqtDT6+AamDapwhT2xOhwvM0ia6+Kip/oFVEE9/UiBanYiDycGS/BWE0 UP87AgMBAAGjggG2MIIBsjALBgNVHQ8EBAMCB4AwKwYDVR0QBCQwIoAPMjAxMDA2MTExODIy MDZagQ8yMDEyMDcxNzIyNTIwNlowGwYNKwYBBAGzJQsDAQEBAQQKFghmaW9yYW1lMTAbBg0r BgEEAbMlCwMBAQECBAoSCDAwMTA0MjYxMFgGCWCGSAGG+mseAQRLDElUaGUgcHJpdmF0ZSBr ZXkgY29ycmVzcG9uZGluZyB0byB0aGlzIGNlcnRpZmljYXRlIG1heSBoYXZlIGJlZW4gZXhw b3J0ZWQuMCgGA1UdEQQhMB+BHU1hdHRoZXcuRmlvcmF2YW50ZUBqaHVhcGwuZWR1MFIGA1Ud HwRLMEkwR6BFoEOkQTA/MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGSkhVQVBMMQ8wDQYDVQQL EwZCSVNEQ0ExDjAMBgNVBAMTBUNSTDU2MB8GA1UdIwQYMBaAFAg1KZsR+dhFNgslphdhCTAd cqnrMB0GA1UdDgQWBBTui2MYOq/cB2fs3ULQR59XWf2EzTAJBgNVHRMEAjAAMBkGCSqGSIb2 fQdBAAQMMAobBFY3LjEDAgSwMA0GCSqGSIb3DQEBBQUAA4GBACTvR0IeGDQoVS87maiuQESQ EQ/CaLoxmX3aO+arr4No1xUHtrBI7y58SWYJv6b/H3WWpKuPAlsI2ByrryKe7A40xLEH6Psu 0qTfzdjbyVlOUqnytVYGLTS0UaBiVAeUNWmfg4PeYN5Kqcn6VDCEiS/CClS7SVXzeH4IBVVG GfcMMYICMTCCAi0CAQEwNzAvMQswCQYDVQQGEwJVUzEPMA0GA1UEChMGSkhVQVBMMQ8wDQYD VQQLEwZCSVNEQ0ECBD/xyf0wCQYFKw4DAhoFAKCCAVAwGAYJKoZIhvcNAQkDMQsGCSqGSIb3 DQEHATAcBgkqhkiG9w0BCQUxDxcNMTEwMzExMjMwMzAzWjAjBgkqhkiG9w0BCQQxFgQU6Hzs iJF11695RBOK6UXlHYcGJ7UwRgYJKwYBBAGCNxAEMTkwNzAvMQswCQYDVQQGEwJVUzEPMA0G A1UEChMGSkhVQVBMMQ8wDQYDVQQLEwZCSVNEQ0ECBD/xkcEwSAYLKoZIhvcNAQkQAgsxOaA3 MC8xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZKSFVBUEwxDzANBgNVBAsTBkJJU0RDQQIEP/GR wTBfBgkqhkiG9w0BCQ8xUjBQMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0D AgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwDQYJKoZIhvcN AQEBBQAEgYCD+6HOzV/8p+ZUiYagSk0p4rtnQWCJuxCYBz8JxZfK8CetmkVOqLe5G93AeGAM R/+EYsEkx2z7CW6n26pYisZdekKn4wD8mts+9w7uegrZIpN7g1/0kAHgoON0L1i1ycwmwxWS xN2nHH7CeWLUTSNwYXP0RX8Rh1GohRIgzRm+MAAAAAAAAA== --------------ms010106000202050500090505-- --===============0541479166== 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.xensource.com http://lists.xensource.com/xen-devel --===============0541479166==--