diff options
Diffstat (limited to 'arch/arc/mm/fault.c')
| -rw-r--r-- | arch/arc/mm/fault.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c index 3861543b66a0..fb86bc3e9b35 100644 --- a/arch/arc/mm/fault.c +++ b/arch/arc/mm/fault.c @@ -30,6 +30,7 @@ noinline static int handle_kernel_vaddr_fault(unsigned long address)  	 * with the 'reference' page table.  	 */  	pgd_t *pgd, *pgd_k; +	p4d_t *p4d, *p4d_k;  	pud_t *pud, *pud_k;  	pmd_t *pmd, *pmd_k; @@ -39,8 +40,13 @@ noinline static int handle_kernel_vaddr_fault(unsigned long address)  	if (!pgd_present(*pgd_k))  		goto bad_area; -	pud = pud_offset(pgd, address); -	pud_k = pud_offset(pgd_k, address); +	p4d = p4d_offset(pgd, address); +	p4d_k = p4d_offset(pgd_k, address); +	if (!p4d_present(*p4d_k)) +		goto bad_area; + +	pud = pud_offset(p4d, address); +	pud_k = pud_offset(p4d_k, address);  	if (!pud_present(*pud_k))  		goto bad_area;  |