[OpenBIOS] [PATCH 6/7] SPARC32: Remove zero page mapping from MMU to enable detection of NULL pointer dereferences

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Fri Apr 12 14:57:46 CEST 2013


Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
Acked-by: Artyom Tarasenko <atar4qemu at gmail.com>
---
 openbios-devel/arch/sparc32/lib.c           |    6 +++---
 openbios-devel/arch/sparc32/ofmem_sparc32.c |    3 +++
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/openbios-devel/arch/sparc32/lib.c b/openbios-devel/arch/sparc32/lib.c
index 350cd08..81d30ad 100644
--- a/openbios-devel/arch/sparc32/lib.c
+++ b/openbios-devel/arch/sparc32/lib.c
@@ -393,9 +393,9 @@ init_mmu_swift(void)
     ofmem_arch_map_pages(pa, va, size, ofmem_arch_default_translation_mode(pa));
     ofmem_map_page_range(pa, va, size, ofmem_arch_default_translation_mode(pa));
 
-    // 1:1 mapping for RAM
-    ofmem_arch_map_pages(0, 0, LOWMEMSZ, ofmem_arch_default_translation_mode(0));
-    ofmem_map_page_range(0, 0, LOWMEMSZ, ofmem_arch_default_translation_mode(0));
+    // 1:1 mapping for RAM (don't map page 0 to allow catching of NULL dereferences)                                                                                                                                            
+    ofmem_arch_map_pages(PAGE_SIZE, PAGE_SIZE, LOWMEMSZ - PAGE_SIZE, ofmem_arch_default_translation_mode(0));                                                                                                                   
+    ofmem_map_page_range(PAGE_SIZE, PAGE_SIZE, LOWMEMSZ - PAGE_SIZE, ofmem_arch_default_translation_mode(0));
 
     /*
      * Flush cache
diff --git a/openbios-devel/arch/sparc32/ofmem_sparc32.c b/openbios-devel/arch/sparc32/ofmem_sparc32.c
index 54cb766..2767b7b 100644
--- a/openbios-devel/arch/sparc32/ofmem_sparc32.c
+++ b/openbios-devel/arch/sparc32/ofmem_sparc32.c
@@ -238,6 +238,9 @@ void ofmem_init( void )
 	memset(&s_ofmem_data, 0, sizeof(s_ofmem_data));
 	s_ofmem_data.ofmem.ramsize = qemu_mem_size;
 	
+	/* Mark the first page as non-free */
+	ofmem_claim_virt(0, PAGE_SIZE, 0);
+	
 	/* Claim reserved physical addresses at top of RAM */
 	ofmem_claim_phys(ofmem_arch_get_phys_top(), s_ofmem_data.ofmem.ramsize - ofmem_arch_get_phys_top(), 0);
 	
-- 
1.7.10.4




More information about the OpenBIOS mailing list