mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/PiSmmCpu: relax superpage protection on page split.
PiSmmCpu driver may split page for page attribute request. Current logic not only propagates the super page attribute to the leaf page attribut, but also to the directory page attribute. However, the later might be wrong because we cannot clear protection without touching directory page attribute. The effective protection is the strictest combination across the levels. We should always clear protection on directory page and set protection on leaf page for easy clearing later. Cc: Jeff Fan <jeff.fan@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiewen Yao <jiewen.yao@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jeff Fan <jeff.fan@intel.com>
This commit is contained in:
parent
78c7bce8f5
commit
e50f951286
|
@ -299,7 +299,7 @@ SplitPage (
|
|||
for (Index = 0; Index < SIZE_4KB / sizeof(UINT64); Index++) {
|
||||
NewPageEntry[Index] = BaseAddress + SIZE_4KB * Index + ((*PageEntry) & PAGE_PROGATE_BITS);
|
||||
}
|
||||
(*PageEntry) = (UINT64)(UINTN)NewPageEntry + ((*PageEntry) & PAGE_PROGATE_BITS);
|
||||
(*PageEntry) = (UINT64)(UINTN)NewPageEntry + PAGE_ATTRIBUTE_BITS;
|
||||
return RETURN_SUCCESS;
|
||||
} else {
|
||||
return RETURN_UNSUPPORTED;
|
||||
|
@ -320,7 +320,7 @@ SplitPage (
|
|||
for (Index = 0; Index < SIZE_4KB / sizeof(UINT64); Index++) {
|
||||
NewPageEntry[Index] = BaseAddress + SIZE_2MB * Index + IA32_PG_PS + ((*PageEntry) & PAGE_PROGATE_BITS);
|
||||
}
|
||||
(*PageEntry) = (UINT64)(UINTN)NewPageEntry + ((*PageEntry) & PAGE_PROGATE_BITS);
|
||||
(*PageEntry) = (UINT64)(UINTN)NewPageEntry + PAGE_ATTRIBUTE_BITS;
|
||||
return RETURN_SUCCESS;
|
||||
} else {
|
||||
return RETURN_UNSUPPORTED;
|
||||
|
|
Loading…
Reference in New Issue