OvmfPkg/MemEncryptSevLib: Address range encryption state interface
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3108 Update the MemEncryptSevLib library to include an interface that can report the encryption state on a range of memory. The values will represent the range as being unencrypted, encrypted, a mix of unencrypted and encrypted, and error (e.g. ranges that aren't mapped). Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Acked-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Message-Id: <0d98f4d42a2b67310c29bac7bcdcf1eda6835847.1610045305.git.thomas.lendacky@amd.com>
This commit is contained in:
committed by
mergify[bot]
parent
a746ca5b47
commit
c330af0246
@ -28,14 +28,14 @@ typedef enum {
|
||||
} MAP_RANGE_MODE;
|
||||
|
||||
/**
|
||||
Get the memory encryption mask
|
||||
Return the pagetable memory encryption mask.
|
||||
|
||||
@param[out] EncryptionMask contains the pte mask.
|
||||
@return The pagetable memory encryption mask.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
UINT64
|
||||
GetMemEncryptionAddressMask (
|
||||
EFIAPI
|
||||
InternalGetMemEncryptionAddressMask (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
@ -200,7 +200,7 @@ Split2MPageTo4K (
|
||||
|
||||
PageTableEntry1 = PageTableEntry;
|
||||
|
||||
AddressEncMask = GetMemEncryptionAddressMask ();
|
||||
AddressEncMask = InternalGetMemEncryptionAddressMask ();
|
||||
|
||||
ASSERT (PageTableEntry != NULL);
|
||||
ASSERT (*PageEntry2M & AddressEncMask);
|
||||
@ -286,7 +286,7 @@ SetPageTablePoolReadOnly (
|
||||
LevelSize[3] = SIZE_1GB;
|
||||
LevelSize[4] = SIZE_512GB;
|
||||
|
||||
AddressEncMask = GetMemEncryptionAddressMask();
|
||||
AddressEncMask = InternalGetMemEncryptionAddressMask();
|
||||
PageTable = (UINT64 *)(UINTN)PageTableBase;
|
||||
PoolUnitSize = PAGE_TABLE_POOL_UNIT_SIZE;
|
||||
|
||||
@ -431,7 +431,7 @@ Split1GPageTo2M (
|
||||
|
||||
PageDirectoryEntry = AllocatePageTableMemory(1);
|
||||
|
||||
AddressEncMask = GetMemEncryptionAddressMask ();
|
||||
AddressEncMask = InternalGetMemEncryptionAddressMask ();
|
||||
ASSERT (PageDirectoryEntry != NULL);
|
||||
ASSERT (*PageEntry1G & AddressEncMask);
|
||||
//
|
||||
@ -485,7 +485,7 @@ SetOrClearCBit(
|
||||
{
|
||||
UINT64 AddressEncMask;
|
||||
|
||||
AddressEncMask = GetMemEncryptionAddressMask ();
|
||||
AddressEncMask = InternalGetMemEncryptionAddressMask ();
|
||||
|
||||
if (Mode == SetCBit) {
|
||||
*PageTablePointer |= AddressEncMask;
|
||||
@ -527,6 +527,7 @@ DisableReadOnlyPageWriteProtect (
|
||||
/**
|
||||
Enable Write Protect on pages marked as read-only.
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
EnableReadOnlyPageWriteProtect (
|
||||
VOID
|
||||
@ -605,7 +606,7 @@ SetMemoryEncDec (
|
||||
//
|
||||
// Check if we have a valid memory encryption mask
|
||||
//
|
||||
AddressEncMask = GetMemEncryptionAddressMask ();
|
||||
AddressEncMask = InternalGetMemEncryptionAddressMask ();
|
||||
if (!AddressEncMask) {
|
||||
return RETURN_ACCESS_DENIED;
|
||||
}
|
||||
|
Reference in New Issue
Block a user