summaryrefslogtreecommitdiffstats
path: root/UefiPayloadPkg/UefiPayloadPkg.dec
diff options
context:
space:
mode:
authorRay Ni <ray.ni@intel.com>2022-07-14 16:03:11 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2022-08-09 07:08:05 +0000
commitbf334513b3eb02ef98e5b38e0b7b5d7408492fdd (patch)
tree3984a10dfce26ac3c5c0f235699c4af00a8773dc /UefiPayloadPkg/UefiPayloadPkg.dec
parentf336e30ba14f182836919a7662134ac28ded983a (diff)
downloadedk2-bf334513b3eb02ef98e5b38e0b7b5d7408492fdd.tar.gz
edk2-bf334513b3eb02ef98e5b38e0b7b5d7408492fdd.tar.bz2
edk2-bf334513b3eb02ef98e5b38e0b7b5d7408492fdd.zip
CpuPageTableLib: Fix a bug when a bit is 1 in Attribute, 0 in Mask
To reproduce the issue: UINTN PageTable; VOID *Buffer; UINTN PageTableBufferSize; IA32_MAP_ATTRIBUTE Attribute; IA32_MAP_ATTRIBUTE Mask; RETURN_STATUS Status; Attribute.Uint64 = 0; Mask.Uint64 = 0; PageTableBufferSize = 0; PageTable = 0; Buffer = NULL; Attribute.Bits.Present = 1; Attribute.Bits.Nx = 1; Mask.Bits.Present = 1; Mask.Uint64 = MAX_UINT64; // // Create page table to cover [0, 10M) // Status = PageTableMap ( &PageTable, PagingMode, Buffer, &PageTableBufferSize, 0, (UINT64)SIZE_2MB * 5, &Attribute, &Mask ); ASSERT (Status == RETURN_BUFFER_TOO_SMALL); Buffer = AllocatePages (EFI_SIZE_TO_PAGES (PageTableBufferSize)); Status = PageTableMap ( &PageTable, PagingMode, Buffer, &PageTableBufferSize, 0, (UINT64)SIZE_2MB * 5, &Attribute, &Mask ); ASSERT (Status == RETURN_SUCCESS); // // Change the mapping for [0, 4KB) // No change actually. Just clear Nx bit in Mask. // Mask.Bits.Nx = 0; PageTableBufferSize = 0; Status = PageTableMap ( &PageTable, PagingMode, NULL, &PageTableBufferSize, 0, (UINT64)SIZE_4KB, &Attribute, &Mask ); ASSERT (Status == RETURN_SUCCESS); // FAIL!! The root cause is when comparing the existing mapping attributes against the requested one, Mask is not used but it should be used. Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com>
Diffstat (limited to 'UefiPayloadPkg/UefiPayloadPkg.dec')
0 files changed, 0 insertions, 0 deletions