From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=66.187.233.73; helo=mx1.redhat.com; envelope-from=marcandre.lureau@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D81352243694E for ; Fri, 23 Feb 2018 05:17:20 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 84479814DF58; Fri, 23 Feb 2018 13:23:21 +0000 (UTC) Received: from localhost (ovpn-112-66.ams2.redhat.com [10.36.112.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE652AFD44; Fri, 23 Feb 2018 13:23:12 +0000 (UTC) From: marcandre.lureau@redhat.com To: edk2-devel@lists.01.org Cc: pjones@redhat.com, jiewen.yao@intel.com, stefanb@linux.vnet.ibm.com, lersek@redhat.com, qemu-devel@nongnu.org, javierm@redhat.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Fri, 23 Feb 2018 14:23:04 +0100 Message-Id: <20180223132311.26555-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Fri, 23 Feb 2018 13:23:21 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Fri, 23 Feb 2018 13:23:21 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'marcandre.lureau@redhat.com' RCPT:'' Subject: [PATCH 0/7] RFC: ovmf: preliminary TPM2 support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Feb 2018 13:17:21 -0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Marc-André Lureau Hi, The following series adds basic TPM2 support for OVMF-on-QEMU (I haven't tested TPM1, for lack of interest). It links with the modules to initializes the device in PEI phase, and do measurements (both PEI and DXE). The Tcg2Dxe module provides the Tcg2 protocol which allows the guest to access the measurement log and other facilities. DxeTpm2MeasureBootLib seems to do its job at measuring images that are not measured in PEI phase (such as PCI PXE rom) Tcg2ConfigDxe is mostly interesting for debugging for now. A major lack is the support for Physical Present Interface (PPI, more below). Linux guests seem to work fine. But windows guest generally complains about the lack of PPI interface (most HLK tests require it, tpm.msc admin interactions too). I haven't done "real" use-cases tests, as I lack experience with TPM usage. Any help appreciated to test the TPM. Tcg2ConfigPei requires variable access, therefore must be solved first. I used "[edk2] [PATCH v2 0/8] OvmfPkg: add the Variable PEIM, defragment the UEFI memmap" as a base for this series. I build edk2 with: $ build -DTPM2_ENABLE -DSECURE_BOOT_ENABLE -DMEM_VARSTORE_EMU_ENABLE=FALSE I test with qemu & swtpm/libtpms (tpm2 branches, swtpm_setup.sh --tpm2 --tpm-state tpmstatedir) $ swtpm socket --tpmstate tpmstatedir --ctrl type=unixio,path=tpmsock --tpm2 & $ qemu .. -chardev socket,id=chrtpm,path=tpmsock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-crb,tpmdev=tpm0 PPI is problematic, because we generally don't want or need SMM, and qemu is preferred to provide the ACPI tables. We therefore exclude using Tcg2Smm for now (which also brings other problems). Stefan Berger has been prototyping qemu code that provides PPI ACPI interface, but there is some complication regarding memory location, using a fixed address. My understanding is that the firmware (seabios/edk2) should allocate the required memory itself (using qemu linker script for ex) and patch the ACPI table. Then it's hopefully only a matter of hooking Tcg2PhysicalPresenceLibProcessRequest() as was done by Stefan in https://github.com/stefanberger/edk2/commits/tpm2. The main problem I see with this approach is that the location should remain stable across reboots (not necessarily poweroff, edk2 uses nvram variables for PPI flags). More investigation and help needed to support PPI! Thanks Related bug: https://bugzilla.tianocore.org/show_bug.cgi?id=594 Marc-André Lureau (7): SecurityPkg/Tcg2Pei: drop Tcg2PhysicalPresenceLib dependency ovmf: link with Tcg2ConfigPei module HACK: HobLib: workaround infinite loop ovmf: link with Tcg2Pei module ovmf: link with Tcg2Dxe module ovmf: link with Tcg2ConfigDxe module ovmf: add DxeTpm2MeasureBootLib MdePkg/Library/PeiHobLib/HobLib.c | 4 +++ OvmfPkg/OvmfPkgX64.dsc | 49 ++++++++++++++++++++++++++++++++++++- OvmfPkg/OvmfPkgX64.fdf | 9 +++++++ SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.c | 2 -- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf | 1 - 5 files changed, 61 insertions(+), 4 deletions(-) -- 2.16.1.73.g5832b7e9f2