> -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Laszlo Ersek > Sent: Saturday, August 8, 2015 12:00 AM > To: edk2-devel-01 > Cc: Paolo Bonzini; Zeng, Star; Justen, Jordan L > Subject: [edk2] [PATCH] OvmfPkg: prevent code execution from DXE stack > > SVN rev 18166 ("MdeModulePkg DxeIpl: Add stack NX support") enables > platforms to request non-executable stack for the DXE phase, by setting > PcdSetNxForStack to TRUE. > > The PCD defaults to FALSE, because: > > (a) A non-executable DXE stack is a new feature and causes changes in > behavior. Some platform could rely on executing code from the stack. > > (b) The code enabling NX in the DXE IPL PEIM enforces the > > PcdSetNxForStack ==> PcdDxeIplBuildPageTables > > implication for "64-bit PEI + 64-bit DXE" platforms, with a new > ASSERT(). Some platform might not comply with this requirement > immediately. > > Regarding (a), in none of the OVMF builds do we try to execute code from > the stack. > > Regarding (b): > > - In the OvmfPkgX64.dsc build (which is where (b) applies) we simply > inherit the PcdDxeIplBuildPageTables|TRUE default from > "MdeModulePkg/MdeModulePkg.dec". Therefore we can set > PcdSetNxForStack > to TRUE. > > - In OvmfPkgIa32X64.dsc, page tables are built by default for DXE. Hence > we can set PcdSetNxForStack to TRUE. > > - In OvmfPkgIa32.dsc, page tables used not to be necessary until now. > After we set PcdSetNxForStack to TRUE in this patch, the DXE IPL will > construct page tables even when it is built as part of OvmfPkgIa32.dsc, > provided the (virtual) hardware supports both PAE mode and the XD bit. > > Should this setting cause problems in a GPU (or other device) passthru > scenario, with a UEFI_DRIVER in the PCI option rom attempting to execute > code from the stack, the feature can be dynamically disabled on the QEMU > command line, with "-cpu <MODEL>,-nx". > > Cc: Paolo Bonzini <[email protected]> > Cc: Jordan Justen <[email protected]> > Cc: "Zeng, Star" <[email protected]> > Suggested-by: Paolo Bonzini <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed by: Star Zeng <[email protected]> > --- > > Notes: > - This patch depends on Star's > > [edk2] [PATCH] UefiCpuPkg CpuDxe: Sync up the settings of Execute > Disable to APs > http://thread.gmane.org/gmane.comp.bios.edk2.devel/960 > > and should be applied only after that patch. > > OvmfPkg/OvmfPkgIa32.dsc | 1 + > OvmfPkg/OvmfPkgIa32X64.dsc | 1 + > OvmfPkg/OvmfPkgX64.dsc | 1 + > 3 files changed, 3 insertions(+) > > diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index > 48118cc..38954109 100644 > --- a/OvmfPkg/OvmfPkgIa32.dsc > +++ b/OvmfPkg/OvmfPkgIa32.dsc > @@ -303,6 +303,7 @@ [PcdsFeatureFlag] > !endif > > [PcdsFixedAtBuild] > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE > gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize|1 > > gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationC > hange|FALSE > gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler|0x10 > diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc > index 6860ad7..6f6517c 100644 > --- a/OvmfPkg/OvmfPkgIa32X64.dsc > +++ b/OvmfPkg/OvmfPkgIa32X64.dsc > @@ -308,6 +308,7 @@ [PcdsFeatureFlag] > !endif > > [PcdsFixedAtBuild] > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE > gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize|1 > > gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationC > hange|FALSE > gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler|0x10 > diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index > f877fda..6b7f955 100644 > --- a/OvmfPkg/OvmfPkgX64.dsc > +++ b/OvmfPkg/OvmfPkgX64.dsc > @@ -308,6 +308,7 @@ [PcdsFeatureFlag] > !endif > > [PcdsFixedAtBuild] > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE > gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize|1 > > gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationC > hange|FALSE > gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler|0x10 > -- > 1.8.3.1 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

