gCpu->SetMemoryAttributes() called by SetUefiImageMemoryAttributes() will return without any problem if Length is 0.
Regards, Jian > -----Original Message----- > From: Yao, Jiewen > Sent: Tuesday, January 30, 2018 10:09 AM > To: Wang, Jian J <[email protected]>; [email protected] > Cc: Zeng, Star <[email protected]>; Dong, Eric <[email protected]>; Ni, > Ruiyu <[email protected]> > Subject: RE: [PATCH] MdeModulePkg/Core: fix feature conflict between NX and > NULL detection > > Hi Jian > May I know how we handle MemoryMapEntry->NumberOfPages is 1? > The lengh will be 0 in that case. Should we add additional check? > > > + SetUefiImageMemoryAttributes ( > > + MemoryMapEntry->PhysicalStart + EFI_PAGE_SIZE, > > + LShiftU64 (MemoryMapEntry->NumberOfPages - 1, > > EFI_PAGE_SHIFT), > > + Attributes); > > > -----Original Message----- > > From: Wang, Jian J > > Sent: Monday, January 29, 2018 7:10 PM > > To: [email protected] > > Cc: Zeng, Star <[email protected]>; Dong, Eric <[email protected]>; Yao, > > Jiewen <[email protected]>; Ni, Ruiyu <[email protected]> > > Subject: [PATCH] MdeModulePkg/Core: fix feature conflict between NX and > > NULL detection > > > > If enabled, NX memory protection feature will mark all free memory as > > NX (non-executable), including page 0. This will overwrite the attributes > > of page 0 if NULL pointer detection feature is also enabled and then > > compromise the functionality of it. The solution is skipping the NX > > attributes setting to page 0 if NULL pointer detection feature is enabled. > > > > Cc: Star Zeng <[email protected]> > > Cc: Eric Dong <[email protected]> > > Cc: Jiewen Yao <[email protected]> > > Cc: Ruiyu Ni <[email protected]> > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Jian J Wang <[email protected]> > > --- > > MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c | 20 > > ++++++++++++++++---- > > 1 file changed, 16 insertions(+), 4 deletions(-) > > > > diff --git a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c > > b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c > > index 862593f562..150167bf66 100644 > > --- a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c > > +++ b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c > > @@ -845,10 +845,22 @@ InitializeDxeNxMemoryProtectionPolicy ( > > > > Attributes = GetPermissionAttributeForMemoryType > > (MemoryMapEntry->Type); > > if (Attributes != 0) { > > - SetUefiImageMemoryAttributes ( > > - MemoryMapEntry->PhysicalStart, > > - LShiftU64 (MemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT), > > - Attributes); > > + if (MemoryMapEntry->PhysicalStart == 0 && > > + PcdGet8 (PcdNullPointerDetectionPropertyMask) != 0) { > > + // > > + // Skip page 0 if NULL pointer detection is enabled to avoid > > attributes > > + // overwritten. > > + // > > + SetUefiImageMemoryAttributes ( > > + MemoryMapEntry->PhysicalStart + EFI_PAGE_SIZE, > > + LShiftU64 (MemoryMapEntry->NumberOfPages - 1, > > EFI_PAGE_SHIFT), > > + Attributes); > > + } else { > > + SetUefiImageMemoryAttributes ( > > + MemoryMapEntry->PhysicalStart, > > + LShiftU64 (MemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT), > > + Attributes); > > + } > > } > > MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, > > DescriptorSize); > > } > > -- > > 2.14.1.windows.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

