On 4/12/23 05:17, duntan via groups.io wrote:
Hi Tom,

This patch set is to change PiSmmCpuDxeSmm code to use CpuPageTableLib to 
create and update SMM page table. The Pcd PcdPteMemoryEncryptionAddressOrMask 
is also used in PiSmmCpuDxeSmm code and the whole range covered by page table 
is mapped encrypted, which is different from the situation in DxeIpl module.
So could you also help do a test to make sure the AMD SEV feature still works 
good in SMM with this patch set?
Here is the code branch in my fork repo: 
https://github.com/td36/edk2/commits/SmmPageTable_V2

Hi Dun,

I tested at the final commit of the branch and encountered a #GP with
an SEV guest. It looks like the CpuPageTableLibrary doesn't take the
encryption bit into account. For example:

Line 436 of UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableMap.c
  PagingEntry = (IA32_PAGING_ENTRY *)(UINTN)IA32_PNLE_PAGE_TABLE_BASE_ADDRESS 
(&ParentPagingEntry->Pnle);

This will get an address with the encryption bit set and then try to
reference it. When I clear the encryption bit, the code proceeds a bit
further, but then encounters a #GP in a different location.

So it appears that the CpuPageTableLibrary doesn't deal with the
encryption bit properly.

Also, going through a build/test of each individual patch had
mixed results.

  - With the second patch in the series applied, I get a build error:

    /root/kernels/ovmf-dun-build-X64/OvmfPkg/OvmfPkgX64.dsc(...): error 4000: 
Instance of library class [CpuPageTableLib] is not found
            in 
[/root/kernels/ovmf-dun-build-X64/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf] 
[X64]
            consumed by module 
[/root/kernels/ovmf-dun-build-X64/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf]

    that isn't resolved until the final patch.

Thanks,
Tom


Thanks,
Dun

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan
Sent: Wednesday, April 12, 2023 4:54 PM
To: devel@edk2.groups.io
Subject: [edk2-devel] [Patch V2 0/8] Use CpuPageTableLib to create and update 
smm page table

In V2 patch set:
1.In 'Refinement to code about updating smm page table', use QuickSort() in 
BaseLib instead or PerformQuickSort() in BaseSortLib.
2.Remove the patch to add BaseSortLib in DSC file.
3.Add a new patch to add CpuPageTableLib in UefiCpuPkg.dsc.
4.Add a temp patch to add CpuPageTableLib in OvmfPkg dsc files for test(A 
previous patch I sent before '[Patch V2 4/8] OvmfPkg: Add CpuPageTableLib 
required by DxeIpl in DSC file' contains all the changes in this patch)

Dun Tan (8):
   OvmfPkg: Add CpuPageTableLib required by PiSmmCpuDxe
   UefiPayloadPkg: Add CpuPageTableLib required by PiSmmCpuDxe
   UefiCpuPkg: Use CpuPageTableLib to convert SMM paging attribute.
   UefiCpuPkg/PiSmmCpuDxeSmm: Avoid setting non-present range to RO/NX
   UefiCpuPkg: Extern mSmmShadowStackSize in PiSmmCpuDxeSmm.h
   UefiCpuPkg: Refinement to current smm page table generation code
   UefiCpuPkg: Refinement to code about updating smm page table
   UefiCpuPkg/PiSmmCpuDxeSmm: Remove unnecessary function

  OvmfPkg/CloudHv/CloudHvX64.dsc                     |   2 +-
  OvmfPkg/OvmfPkgIa32.dsc                            |   3 ++-
  OvmfPkg/OvmfPkgIa32X64.dsc                         |   2 +-
  OvmfPkg/OvmfPkgX64.dsc                             |   2 +-
  UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c           |   5 +++--
  UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c      |   3 +--
  UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmProfileArch.c    |   2 +-
  UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c              | 132 
------------------------------------------------------------------------------------------------------------------------------------
  UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c         |   8 ++++++--
  UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h         |  97 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------
  UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf       |   1 +
  UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c | 629 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c             | 348 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c            | 229 
++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c       |   3 +--
  UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmProfileArch.c     |  19 ++-----------------
  UefiPayloadPkg/UefiPayloadPkg.dsc                  |   2 +-
  17 files changed, 510 insertions(+), 977 deletions(-)



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#102915): https://edk2.groups.io/g/devel/message/102915
Mute This Topic: https://groups.io/mt/98215421/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to