[edk2] [PATCH v3 0/4] RFC: ovmf: Add support for TPM Physical Presence interface

marcandre.lureau@redhat.com posted 4 patches 5 years, 11 months ago
Failed in applying to current master (apply log)
OvmfPkg/OvmfPkgIa32.dsc                       |   4 +-
OvmfPkg/OvmfPkgIa32X64.dsc                    |   4 +-
OvmfPkg/OvmfPkgX64.dsc                        |   4 +-
.../PlatformBootManagerLib.inf                |   2 +
.../DxeTcg2PhysicalPresenceLib.inf            |  33 +
.../DxeTcg2PhysicalPresenceLib.inf            |  46 +-
OvmfPkg/Include/IndustryStandard/QemuTpm.h    |  69 ++
.../PlatformBootManagerLib/BdsPlatform.c      |   6 +
.../DxeTcg2PhysicalPresenceLib.c              |  20 +-
.../DxeTcg2PhysicalPresenceLib.c              | 919 ++++++++++++++++++
.../PhysicalPresenceStrings.uni               |  33 +-
11 files changed, 1081 insertions(+), 59 deletions(-)
create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/DxeTcg2PhysicalPresenceLib.inf (66%)
create mode 100644 OvmfPkg/Include/IndustryStandard/QemuTpm.h
copy EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/Ia32/CpuSleep.c => OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c (55%)
create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c
copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/PhysicalPresenceStrings.uni (56%)
[edk2] [PATCH v3 0/4] RFC: ovmf: Add support for TPM Physical Presence interface
Posted by marcandre.lureau@redhat.com 5 years, 11 months ago
From: Marc-André Lureau <marcandre.lureau@redhat.com>

Hi,

The following series adds basic TPM PPI 1.3 support for OVMF-on-QEMU
with TPM2 (I haven't looked at TPM1, for lack of interest).

PPI test runs successfully with Windows 10 WHLK, despite the limited
number of supported funcions (tpm2_ppi_funcs table, in particular, no
function allows to manipulate Tcg2PhysicalPresenceFlags)

The way it works is relatively simple: a memory region is allocated by
QEMU to save PPI related variables. An ACPI interface is exposed by
QEMU to let the guest manipulate those. At boot, ovmf processes and
updates the PPI qemu region and request variables.

I build edk2 with:

$ build -DTPM2_ENABLE

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

Github trees:
https://github.com/elmarco/edk2/tree/tpm-ppi
https://github.com/elmarco/qemu/tree/tpm-ppi

Thanks

v3: after Laszlo review
 - dropped DxeTcg2PhysicalPresenceLib.uni
 - removed mTpm2PPIFuncs static initialization, use hard-coded assignments
 - declared STATIC the functions that should be
 - fixed an OUT/IN decorator
 - use EFI_PROTOCOL_ERROR instead of EFI_INVALID_PARAMETER when PPI
   initialization fails
 - replaced EFI_D_INFO with DEBUG_INFO
 - added a check for mPpi address that it doesn't cross a page boundary
 - added a GetMemorySpaceDescriptor() check for memory type
 - declared *mPpi as volatile, to correct mmio access
 - a few more style changes
 - comments updated
 - some minor dead code/inclusion/defines removal
 - added a few r-b tags

v2:
 - style and commit message fixes

Marc-André Lureau (4):
  OvmfPkg: add Tcg2PhysicalPresenceLibNull when !TPM2_ENABLE
  OvmfPkg/IndustryStandard: add QemuTpm.h header
  OvmfPkg: add Tcg2PhysicalPresenceLibQemu
  OvmfPkg/PlatformBootManagerLib: process TPM PPI request

 OvmfPkg/OvmfPkgIa32.dsc                       |   4 +-
 OvmfPkg/OvmfPkgIa32X64.dsc                    |   4 +-
 OvmfPkg/OvmfPkgX64.dsc                        |   4 +-
 .../PlatformBootManagerLib.inf                |   2 +
 .../DxeTcg2PhysicalPresenceLib.inf            |  33 +
 .../DxeTcg2PhysicalPresenceLib.inf            |  46 +-
 OvmfPkg/Include/IndustryStandard/QemuTpm.h    |  69 ++
 .../PlatformBootManagerLib/BdsPlatform.c      |   6 +
 .../DxeTcg2PhysicalPresenceLib.c              |  20 +-
 .../DxeTcg2PhysicalPresenceLib.c              | 919 ++++++++++++++++++
 .../PhysicalPresenceStrings.uni               |  33 +-
 11 files changed, 1081 insertions(+), 59 deletions(-)
 create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
 copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/DxeTcg2PhysicalPresenceLib.inf (66%)
 create mode 100644 OvmfPkg/Include/IndustryStandard/QemuTpm.h
 copy EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/Ia32/CpuSleep.c => OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c (55%)
 create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c
 copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/PhysicalPresenceStrings.uni (56%)

-- 
2.17.0.253.g3dd125b46d

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH v3 0/4] RFC: ovmf: Add support for TPM Physical Presence interface
Posted by Stefan Berger 5 years, 11 months ago
On 05/18/2018 08:23 AM, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Hi,
>
> The following series adds basic TPM PPI 1.3 support for OVMF-on-QEMU
> with TPM2 (I haven't looked at TPM1, for lack of interest).
>
> PPI test runs successfully with Windows 10 WHLK, despite the limited
> number of supported funcions (tpm2_ppi_funcs table, in particular, no
> function allows to manipulate Tcg2PhysicalPresenceFlags)
>
> The way it works is relatively simple: a memory region is allocated by
> QEMU to save PPI related variables. An ACPI interface is exposed by
> QEMU to let the guest manipulate those. At boot, ovmf processes and
> updates the PPI qemu region and request variables.
>
> I build edk2 with:
>
> $ build -DTPM2_ENABLE
>
> 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 &

Make this:

swtpm socket --tpmstate dir=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
>
> Github trees:
> https://github.com/elmarco/edk2/tree/tpm-ppi
> https://github.com/elmarco/qemu/tree/tpm-ppi
>
> Thanks
>
> v3: after Laszlo review
>   - dropped DxeTcg2PhysicalPresenceLib.uni
>   - removed mTpm2PPIFuncs static initialization, use hard-coded assignments
>   - declared STATIC the functions that should be
>   - fixed an OUT/IN decorator
>   - use EFI_PROTOCOL_ERROR instead of EFI_INVALID_PARAMETER when PPI
>     initialization fails
>   - replaced EFI_D_INFO with DEBUG_INFO
>   - added a check for mPpi address that it doesn't cross a page boundary
>   - added a GetMemorySpaceDescriptor() check for memory type
>   - declared *mPpi as volatile, to correct mmio access
>   - a few more style changes
>   - comments updated
>   - some minor dead code/inclusion/defines removal
>   - added a few r-b tags
>
> v2:
>   - style and commit message fixes
>
> Marc-André Lureau (4):
>    OvmfPkg: add Tcg2PhysicalPresenceLibNull when !TPM2_ENABLE
>    OvmfPkg/IndustryStandard: add QemuTpm.h header
>    OvmfPkg: add Tcg2PhysicalPresenceLibQemu
>    OvmfPkg/PlatformBootManagerLib: process TPM PPI request
>
>   OvmfPkg/OvmfPkgIa32.dsc                       |   4 +-
>   OvmfPkg/OvmfPkgIa32X64.dsc                    |   4 +-
>   OvmfPkg/OvmfPkgX64.dsc                        |   4 +-
>   .../PlatformBootManagerLib.inf                |   2 +
>   .../DxeTcg2PhysicalPresenceLib.inf            |  33 +
>   .../DxeTcg2PhysicalPresenceLib.inf            |  46 +-
>   OvmfPkg/Include/IndustryStandard/QemuTpm.h    |  69 ++
>   .../PlatformBootManagerLib/BdsPlatform.c      |   6 +
>   .../DxeTcg2PhysicalPresenceLib.c              |  20 +-
>   .../DxeTcg2PhysicalPresenceLib.c              | 919 ++++++++++++++++++
>   .../PhysicalPresenceStrings.uni               |  33 +-
>   11 files changed, 1081 insertions(+), 59 deletions(-)
>   create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
>   copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/DxeTcg2PhysicalPresenceLib.inf (66%)
>   create mode 100644 OvmfPkg/Include/IndustryStandard/QemuTpm.h
>   copy EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/Ia32/CpuSleep.c => OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c (55%)
>   create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c
>   copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/PhysicalPresenceStrings.uni (56%)
>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH v3 0/4] RFC: ovmf: Add support for TPM Physical Presence interface
Posted by Laszlo Ersek 5 years, 11 months ago
On 05/18/18 14:23, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Hi,
> 
> The following series adds basic TPM PPI 1.3 support for OVMF-on-QEMU
> with TPM2 (I haven't looked at TPM1, for lack of interest).
> 
> PPI test runs successfully with Windows 10 WHLK, despite the limited
> number of supported funcions (tpm2_ppi_funcs table, in particular, no
> function allows to manipulate Tcg2PhysicalPresenceFlags)
> 
> The way it works is relatively simple: a memory region is allocated by
> QEMU to save PPI related variables. An ACPI interface is exposed by
> QEMU to let the guest manipulate those. At boot, ovmf processes and
> updates the PPI qemu region and request variables.
> 
> I build edk2 with:
> 
> $ build -DTPM2_ENABLE
> 
> 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
> 
> Github trees:
> https://github.com/elmarco/edk2/tree/tpm-ppi
> https://github.com/elmarco/qemu/tree/tpm-ppi
> 
> Thanks
> 
> v3: after Laszlo review
>  - dropped DxeTcg2PhysicalPresenceLib.uni
>  - removed mTpm2PPIFuncs static initialization, use hard-coded assignments
>  - declared STATIC the functions that should be
>  - fixed an OUT/IN decorator
>  - use EFI_PROTOCOL_ERROR instead of EFI_INVALID_PARAMETER when PPI
>    initialization fails
>  - replaced EFI_D_INFO with DEBUG_INFO
>  - added a check for mPpi address that it doesn't cross a page boundary
>  - added a GetMemorySpaceDescriptor() check for memory type
>  - declared *mPpi as volatile, to correct mmio access
>  - a few more style changes
>  - comments updated
>  - some minor dead code/inclusion/defines removal
>  - added a few r-b tags
> 
> v2:
>  - style and commit message fixes
> 
> Marc-André Lureau (4):
>   OvmfPkg: add Tcg2PhysicalPresenceLibNull when !TPM2_ENABLE
>   OvmfPkg/IndustryStandard: add QemuTpm.h header
>   OvmfPkg: add Tcg2PhysicalPresenceLibQemu
>   OvmfPkg/PlatformBootManagerLib: process TPM PPI request
> 
>  OvmfPkg/OvmfPkgIa32.dsc                       |   4 +-
>  OvmfPkg/OvmfPkgIa32X64.dsc                    |   4 +-
>  OvmfPkg/OvmfPkgX64.dsc                        |   4 +-
>  .../PlatformBootManagerLib.inf                |   2 +
>  .../DxeTcg2PhysicalPresenceLib.inf            |  33 +
>  .../DxeTcg2PhysicalPresenceLib.inf            |  46 +-
>  OvmfPkg/Include/IndustryStandard/QemuTpm.h    |  69 ++
>  .../PlatformBootManagerLib/BdsPlatform.c      |   6 +
>  .../DxeTcg2PhysicalPresenceLib.c              |  20 +-
>  .../DxeTcg2PhysicalPresenceLib.c              | 919 ++++++++++++++++++
>  .../PhysicalPresenceStrings.uni               |  33 +-
>  11 files changed, 1081 insertions(+), 59 deletions(-)
>  create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
>  copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/DxeTcg2PhysicalPresenceLib.inf (66%)
>  create mode 100644 OvmfPkg/Include/IndustryStandard/QemuTpm.h
>  copy EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/Ia32/CpuSleep.c => OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c (55%)
>  create mode 100644 OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c
>  copy {SecurityPkg/Library/DxeTcg2PhysicalPresenceLib => OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu}/PhysicalPresenceStrings.uni (56%)
> 

I briefly summarized the updates that I mentioned in review on the
patches themselves, and pushed the series as commit range
75135cc6988e..8d65d3b25e35.

Thank you guys again!
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel