[U-Boot] [PATCH] armv8: mmu: Detect page table overflow in emergency pt creation
york sun
york.sun at nxp.com
Fri Jul 29 17:22:27 CEST 2016
On 07/28/2016 11:50 PM, Alexander Graf wrote:
> We create 2 sets of page tables: One for normal operation, one for
> emergency (used while modifying the former).
>
> Because the page tables grow dynamically, we have code that checks
> for overflow. Unfortunately we didn't adjust the available space
> variable while creating the emergency tables, so potentially someone
> might run into an overflow there (not seen in real world yet though!).
>
> Fix it by properly adjusting the size as well as the base offset in
> emergency page table creation.
>
> Reported-by: York Sun <york.sun at nxp.com>
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
> arch/arm/cpu/armv8/cache_v8.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
> index ac909a1..8a82bba 100644
> --- a/arch/arm/cpu/armv8/cache_v8.c
> +++ b/arch/arm/cpu/armv8/cache_v8.c
> @@ -380,6 +380,7 @@ void setup_pgtables(void)
> static void setup_all_pgtables(void)
> {
> u64 tlb_addr = gd->arch.tlb_addr;
> + u64 tlb_size = gd->arch.tlb_size;
>
> /* Reset the fill ptr */
> gd->arch.tlb_fillptr = tlb_addr;
> @@ -388,10 +389,13 @@ static void setup_all_pgtables(void)
> setup_pgtables();
>
> /* Create emergency page tables */
> + gd->arch.tlb_size -= ((uintptr_t)gd->arch.tlb_fillptr -
> + (uintptr_t)gd->arch.tlb_addr);
nitpik. The parentheses are not necessary.
> gd->arch.tlb_addr = gd->arch.tlb_fillptr;
> setup_pgtables();
> gd->arch.tlb_emerg = gd->arch.tlb_addr;
> gd->arch.tlb_addr = tlb_addr;
> + gd->arch.tlb_size = tlb_size;
> }
>
> /* to activate the MMU we need to set up virtual memory */
>
Reviewed-by: York Sun <york.sun at nxp.com>
More information about the U-Boot
mailing list