[PATCH v1 0/1] Not to Update Bitwidth Variable in Static Paging


Kun Qin
 

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3300

Current implementation of SetStaticPageTable routine in PiSmmCpuDxeSmm
driver will check a global variable mPhysicalAddressBits, and eventually
cap any value larger than 39 at 39.

However, this global variable is used in ConvertMemoryPageAttributes,
which backs SmmSetMemoryAttributes and SmmClearMemoryAttributes. Thus for
a processor that supports more than 39 bits width, trying to mark page
table regions higher than 39-bit will always return EFI_UNSUPPROTED. As a
result, access rights to pages residing higher than 39 bits in the
physical address space will not be correctly configured (i.e. restricted)
in the SMM page table entries.

This change attempts to fix this issue by switching to caching the global
bitwidth variable in local variable for SetStaticPageTable routine.

Patch v1 branch: https://github.com/kuqin12/edk2/tree/bitwidth_paging

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>

Kun Qin (1):
UefiCpuPkg: PiSmmCpuDxeSmm: Not to Change Bitwidth During Static
Paging

UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c | 25 +++++++++++---------
1 file changed, 14 insertions(+), 11 deletions(-)

--
2.31.0.windows.1

Join devel@edk2.groups.io to automatically receive all group messages.