Re: [PATCH 1/1] arm: mmu: catch NULL pointer dereferences
On Mon, Sep 02, 2013 at 12:24:06PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: On 11:05 Mon 02 Sep , Sascha Hauer wrote: On Sat, Aug 31, 2013 at 05:54:22PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: For high vectors if memory start at 0x0. We have to live without being able to catch NULL pointer dereferences. Why not add the check to vectors_init() instead of passing this as argument? I must say I'm not entirely happy with this approach. Being able to catch NULL pointer derefs is really a good thing. When exactly does the faulting zero SDRAM page become a problem for you? obviously something like cp /somehing /dev/ram0 does not work. Some care must probably be taken when setting up the kernel parameters. Are these the problems or is there something else? yes it's get issue with uImage that get data load there :( as I can not control the load addr from uImage :( and on ux5x0 and arm board I have ddr starting at 0x0 Maybe we should add some hook which dynamically enables/disables the zero page. The bootm code could then disable it. Anyway, for now we can also apply the current patch, but please move the is_start_zero test to vectors_init(). Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0| Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917- | ___ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH 1/1] arm: mmu: catch NULL pointer dereferences
On Sat, Aug 31, 2013 at 05:54:22PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: For high vectors if memory start at 0x0. We have to live without being able to catch NULL pointer dereferences. Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagn...@jcrosoft.com --- arch/arm/cpu/mmu.c | 27 +-- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c index e3ea3b6..2e69b16 100644 --- a/arch/arm/cpu/mmu.c +++ b/arch/arm/cpu/mmu.c @@ -218,9 +218,9 @@ static int arm_mmu_remap_sdram(struct memory_bank *bank) /* * Map vectors and zero page */ -static void vectors_init(void) +static void vectors_init(bool zero_valid_addr) { - u32 *exc, *zero = NULL; + u32 *exc; void *vectors; u32 cr; @@ -235,10 +235,19 @@ static void vectors_init(void) * page table for the high vectors and zero page */ exc = arm_create_pte(0xfff0); - zero = arm_create_pte(0x0); - /* Set the zero page to faulting */ - zero[0] = 0; + /* + * Memory start at 0x0. We have to + * live without being able to catch NULL pointer dereferences + */ + if (!zero_valid_addr) { + u32 *zero = NULL; + + zero = arm_create_pte(0x0); + + /* Set the zero page to faulting */ + zero[0] = 0; + } } else { /* * Otherwise map the vectors to the zero page. We have to @@ -267,6 +276,7 @@ static int mmu_init(void) { struct memory_bank *bank; int i; + bool is_start_zero = 0; arm_set_cache_functions(); @@ -303,7 +313,12 @@ static int mmu_init(void) create_sections(0, 0, PAGE_SIZE, PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | PMD_TYPE_SECT); - vectors_init(); + for_each_memory_bank(bank) { + if (bank-start == 0x0) + is_start_zero = 1; + } + + vectors_init(is_start_zero); Why not add the check to vectors_init() instead of passing this as argument? I must say I'm not entirely happy with this approach. Being able to catch NULL pointer derefs is really a good thing. When exactly does the faulting zero SDRAM page become a problem for you? obviously something like cp /somehing /dev/ram0 does not work. Some care must probably be taken when setting up the kernel parameters. Are these the problems or is there something else? Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0| Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917- | ___ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH 1/1] arm: mmu: catch NULL pointer dereferences
On 11:05 Mon 02 Sep , Sascha Hauer wrote: On Sat, Aug 31, 2013 at 05:54:22PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: For high vectors if memory start at 0x0. We have to live without being able to catch NULL pointer dereferences. Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagn...@jcrosoft.com --- arch/arm/cpu/mmu.c | 27 +-- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c index e3ea3b6..2e69b16 100644 --- a/arch/arm/cpu/mmu.c +++ b/arch/arm/cpu/mmu.c @@ -218,9 +218,9 @@ static int arm_mmu_remap_sdram(struct memory_bank *bank) /* * Map vectors and zero page */ -static void vectors_init(void) +static void vectors_init(bool zero_valid_addr) { - u32 *exc, *zero = NULL; + u32 *exc; void *vectors; u32 cr; @@ -235,10 +235,19 @@ static void vectors_init(void) * page table for the high vectors and zero page */ exc = arm_create_pte(0xfff0); - zero = arm_create_pte(0x0); - /* Set the zero page to faulting */ - zero[0] = 0; + /* +* Memory start at 0x0. We have to +* live without being able to catch NULL pointer dereferences +*/ + if (!zero_valid_addr) { + u32 *zero = NULL; + + zero = arm_create_pte(0x0); + + /* Set the zero page to faulting */ + zero[0] = 0; + } } else { /* * Otherwise map the vectors to the zero page. We have to @@ -267,6 +276,7 @@ static int mmu_init(void) { struct memory_bank *bank; int i; + bool is_start_zero = 0; arm_set_cache_functions(); @@ -303,7 +313,12 @@ static int mmu_init(void) create_sections(0, 0, PAGE_SIZE, PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | PMD_TYPE_SECT); - vectors_init(); + for_each_memory_bank(bank) { + if (bank-start == 0x0) + is_start_zero = 1; + } + + vectors_init(is_start_zero); Why not add the check to vectors_init() instead of passing this as argument? I must say I'm not entirely happy with this approach. Being able to catch NULL pointer derefs is really a good thing. When exactly does the faulting zero SDRAM page become a problem for you? obviously something like cp /somehing /dev/ram0 does not work. Some care must probably be taken when setting up the kernel parameters. Are these the problems or is there something else? yes it's get issue with uImage that get data load there :( as I can not control the load addr from uImage :( and on ux5x0 and arm board I have ddr starting at 0x0 Best Regards, J. ___ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
[PATCH 1/1] arm: mmu: catch NULL pointer dereferences
For high vectors if memory start at 0x0. We have to live without being able to catch NULL pointer dereferences. Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagn...@jcrosoft.com --- arch/arm/cpu/mmu.c | 27 +-- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c index e3ea3b6..2e69b16 100644 --- a/arch/arm/cpu/mmu.c +++ b/arch/arm/cpu/mmu.c @@ -218,9 +218,9 @@ static int arm_mmu_remap_sdram(struct memory_bank *bank) /* * Map vectors and zero page */ -static void vectors_init(void) +static void vectors_init(bool zero_valid_addr) { - u32 *exc, *zero = NULL; + u32 *exc; void *vectors; u32 cr; @@ -235,10 +235,19 @@ static void vectors_init(void) * page table for the high vectors and zero page */ exc = arm_create_pte(0xfff0); - zero = arm_create_pte(0x0); - /* Set the zero page to faulting */ - zero[0] = 0; + /* +* Memory start at 0x0. We have to +* live without being able to catch NULL pointer dereferences +*/ + if (!zero_valid_addr) { + u32 *zero = NULL; + + zero = arm_create_pte(0x0); + + /* Set the zero page to faulting */ + zero[0] = 0; + } } else { /* * Otherwise map the vectors to the zero page. We have to @@ -267,6 +276,7 @@ static int mmu_init(void) { struct memory_bank *bank; int i; + bool is_start_zero = 0; arm_set_cache_functions(); @@ -303,7 +313,12 @@ static int mmu_init(void) create_sections(0, 0, PAGE_SIZE, PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | PMD_TYPE_SECT); - vectors_init(); + for_each_memory_bank(bank) { + if (bank-start == 0x0) + is_start_zero = 1; + } + + vectors_init(is_start_zero); /* * First remap sdram cached using sections. -- 1.8.4.rc1 ___ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox