| From e8446da2973a09dd836f94678556e259e3bf7e50 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 14 Dec 2018 15:23:33 +0000 |
| Subject: powerpc/mm: Make NULL pointer deferences explicit on bad page faults. |
| |
| From: Christophe Leroy <christophe.leroy@c-s.fr> |
| |
| [ Upstream commit 49a502ea23bf9dec47f8f3c3960909ff409cd1bb ] |
| |
| As several other arches including x86, this patch makes it explicit |
| that a bad page fault is a NULL pointer dereference when the fault |
| address is lower than PAGE_SIZE |
| |
| In the mean time, this page makes all bad_page_fault() messages |
| shorter so that they remain on one single line. And it prefixes them |
| by "BUG: " so that they get easily grepped. |
| |
| Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> |
| [mpe: Avoid pr_cont()] |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/powerpc/mm/fault.c | 17 +++++++++-------- |
| 1 file changed, 9 insertions(+), 8 deletions(-) |
| |
| diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c |
| index d154e333f76b7..d1f860ca03ade 100644 |
| --- a/arch/powerpc/mm/fault.c |
| +++ b/arch/powerpc/mm/fault.c |
| @@ -521,21 +521,22 @@ void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig) |
| switch (regs->trap) { |
| case 0x300: |
| case 0x380: |
| - printk(KERN_ALERT "Unable to handle kernel paging request for " |
| - "data at address 0x%08lx\n", regs->dar); |
| + pr_alert("BUG: %s at 0x%08lx\n", |
| + regs->dar < PAGE_SIZE ? "Kernel NULL pointer dereference" : |
| + "Unable to handle kernel data access", regs->dar); |
| break; |
| case 0x400: |
| case 0x480: |
| - printk(KERN_ALERT "Unable to handle kernel paging request for " |
| - "instruction fetch\n"); |
| + pr_alert("BUG: Unable to handle kernel instruction fetch%s", |
| + regs->nip < PAGE_SIZE ? " (NULL pointer?)\n" : "\n"); |
| break; |
| case 0x600: |
| - printk(KERN_ALERT "Unable to handle kernel paging request for " |
| - "unaligned access at address 0x%08lx\n", regs->dar); |
| + pr_alert("BUG: Unable to handle kernel unaligned access at 0x%08lx\n", |
| + regs->dar); |
| break; |
| default: |
| - printk(KERN_ALERT "Unable to handle kernel paging request for " |
| - "unknown fault\n"); |
| + pr_alert("BUG: Unable to handle unknown paging fault at 0x%08lx\n", |
| + regs->dar); |
| break; |
| } |
| printk(KERN_ALERT "Faulting instruction address: 0x%08lx\n", |
| -- |
| 2.20.1 |
| |