diff options
author | Will Deacon <will.deacon@arm.com> | 2017-10-31 15:56:11 +0000 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2017-11-02 13:52:48 +0000 |
commit | 80b6eb04b5d05a472a37ae33647b213dd04e59b6 (patch) | |
tree | fbd0352ec3a12892a02127e60579316cc325fad8 /arch/arm64/mm/fault.c | |
parent | c80ed088a519da53f27b798a69748eaabc66aadf (diff) | |
download | linux-80b6eb04b5d05a472a37ae33647b213dd04e59b6.tar.gz linux-80b6eb04b5d05a472a37ae33647b213dd04e59b6.tar.bz2 linux-80b6eb04b5d05a472a37ae33647b213dd04e59b6.zip |
arm64: Don't walk page table for user faults in do_mem_abort
Commit 42dbf54e8890 ("arm64: consistently log ESR and page table")
dumps page table entries for user faults hitting do_bad entries in the
fault handler table. Whilst this shouldn't really happen in practice,
it's not beyond the realms of possibility if e.g. running an old kernel
on a new CPU.
Generally, we want to avoid exposing physical addresses under the control
of userspace (see commit bf396c09c24 ("arm64: mm: don't print out page
table entries on EL0 faults")), so walk the page tables only on exceptions
from EL1.
Reported-by: Kristina Martsenko <kristina.martsenko@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/mm/fault.c')
-rw-r--r-- | arch/arm64/mm/fault.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 6ee22cd8a249..a2a1a6c83da1 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -698,7 +698,8 @@ asmlinkage void __exception do_mem_abort(unsigned long addr, unsigned int esr, mem_abort_decode(esr); - show_pte(addr); + if (!user_mode(regs)) + show_pte(addr); info.si_signo = inf->sig; info.si_errno = 0; |