Revision: 19068
          http://sourceforge.net/p/edk2/code/19068
Author:   lersek
Date:     2015-11-30 19:57:45 +0000 (Mon, 30 Nov 2015)
Log Message:
-----------
UefiCpuPkg/PiSmmCpu: Always set WP in CR0

So that we can use write-protection for code later.

It is REPOST.
It includes suggestion from Michael Kinney <[email protected]>:
- "For IA32 assembly, can we combine into a single OR instruction that
  sets both page enable and WP?"
- "For X64, does it make sense to use single OR instruction instead of 2
  BTS instructions as well?"

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <[email protected]>
Suggested-by: Michael Kinney <[email protected]>
Reviewed-by: Michael Kinney <[email protected]>
Tested-by: Laszlo Ersek <[email protected]>
Cc: "Fan, Jeff" <[email protected]>
Cc: "Kinney, Michael D" <[email protected]>
Cc: "Laszlo Ersek" <[email protected]>
Cc: "Paolo Bonzini" <[email protected]>

Modified Paths:
--------------
    trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.S
    trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.asm
    trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.S
    trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.asm

Modified: trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.S
===================================================================
--- trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.S        2015-11-30 
19:57:40 UTC (rev 19067)
+++ trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.S        2015-11-30 
19:57:45 UTC (rev 19068)
@@ -123,7 +123,7 @@
 L12:                                       # as cr4.PGE is not set here, 
refresh cr3
     movl    %eax, %cr4                     # in PreModifyMtrrs() to flush TLB.
     movl    %cr0, %ebx
-    orl     $0x080000000, %ebx             # enable paging
+    orl     $0x080010000, %ebx             # enable paging + WP
     movl    %ebx, %cr0
     leal    DSC_OFFSET(%edi),%ebx
     movw    DSC_DS(%ebx),%ax

Modified: trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.asm
===================================================================
--- trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.asm      2015-11-30 
19:57:40 UTC (rev 19067)
+++ trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmiEntry.asm      2015-11-30 
19:57:45 UTC (rev 19068)
@@ -129,7 +129,7 @@
 @@:                                     ; as cr4.PGE is not set here, refresh 
cr3
     mov     cr4, eax                    ; in PreModifyMtrrs() to flush TLB.
     mov     ebx, cr0
-    or      ebx, 080000000h             ; enable paging
+    or      ebx, 080010000h             ; enable paging + WP
     mov     cr0, ebx
     lea     ebx, [edi + DSC_OFFSET]
     mov     ax, [ebx + DSC_DS]

Modified: trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.S
===================================================================
--- trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.S 2015-11-30 19:57:40 UTC 
(rev 19067)
+++ trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.S 2015-11-30 19:57:45 UTC 
(rev 19068)
@@ -144,7 +144,7 @@
     orb     $1,%ah
     wrmsr
     movq    %cr0, %rbx
-    btsl    $31, %ebx
+    orl     $0x080010000, %ebx          # enable paging + WP
     movq    %rbx, %cr0
     retf
 LongMode:                               # long mode (64-bit code) starts here

Modified: trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.asm
===================================================================
--- trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.asm       2015-11-30 
19:57:40 UTC (rev 19067)
+++ trunk/edk2/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.asm       2015-11-30 
19:57:45 UTC (rev 19068)
@@ -140,7 +140,7 @@
     or      ah, 1
     wrmsr
     mov     rbx, cr0
-    bts     ebx, 31
+    or      ebx, 080010000h            ; enable paging + WP
     mov     cr0, rbx
     retf
 @LongMode:                              ; long mode (64-bit code) starts here


------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to