Re: [PATCH] parisc: Fix kernel panic in mem_init()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, May 30, 2020 at 11:34:02AM +0200, Helge Deller wrote:
> Dear stable kernel maintainers,
> can you please apply this patch to all 3.x and 4.x stable kernels?
> Based on upstream commit bf71bc16e02162388808949b179d59d0b571b965
> which doesn't apply out of the box on older kernels.
> -----------
> 
> The Debian kernel v5.6 triggers this kernel panic:
> 
>  Kernel panic - not syncing: Bad Address (null pointer deref?)
>  Bad Address (null pointer deref?): Code=26 (Data memory access rights trap) at addr 0000000000000000
>  CPU: 0 PID: 0 Comm: swapper Not tainted 5.6.0-2-parisc64 #1 Debian 5.6.14-1
>   IAOQ[0]: mem_init+0xb0/0x150
>   IAOQ[1]: mem_init+0xb4/0x150
>   RP(r2): start_kernel+0x6c8/0x1190
>  Backtrace:
>   [<0000000040101ab4>] start_kernel+0x6c8/0x1190
>   [<0000000040108574>] start_parisc+0x158/0x1b8
> 
> on a HP-PARISC rp3440 machine with this memory layout:
>  Memory Ranges:
>   0) Start 0x0000000000000000 End 0x000000003fffffff Size   1024 MB
>   1) Start 0x0000004040000000 End 0x00000040ffdfffff Size   3070 MB
> 
> Fix the crash by avoiding virt_to_page() and similar functions in
> mem_init() until the memory zones have been fully set up.
> 
> Signed-off-by: Helge Deller <deller@xxxxxx>
> 
> diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
> index aae9b0d71c1e..10a52664e29f 100644
> --- a/arch/parisc/mm/init.c
> +++ b/arch/parisc/mm/init.c
> @@ -607,7 +607,7 @@ void __init mem_init(void)
>  			> BITS_PER_LONG);
> 
>  	high_memory = __va((max_pfn << PAGE_SHIFT));
> -	set_max_mapnr(page_to_pfn(virt_to_page(high_memory - 1)) + 1);
> +	set_max_mapnr(max_low_pfn);
>  	free_all_bootmem();
> 
>  #ifdef CONFIG_PA11

Now queued up, thanks!

greg k-h




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux