ARM: 8036/1: Enable IRQs before attempting to read user space in __und_usr
authorCatalin Marinas <catalin.marinas@arm.com>
Tue, 22 Apr 2014 15:14:29 +0000 (16:14 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 25 Apr 2014 11:06:38 +0000 (12:06 +0100)
commit1417a6b8dc4db73055be9a3aa288b050e9dc06ab
tree82fe7a3cb59ff82ddb74a8ebc6ff2d2e9237733b
parentbc94081c6ac823c4723d8e36e9604c6cf3eba0ef
ARM: 8036/1: Enable IRQs before attempting to read user space in __und_usr

The Undef abort handler in the kernel reads the undefined instruction
from user space. If the page table was modified from another CPU, the
user access could fail and do_page_fault() will be executed with
interrupts disabled. This can potentially deadlock on ARM11MPCore or on
Cortex-A15 with erratum 798181 workaround enabled (both implying IPI for
TLB maintenance with page table lock held).

This patch enables the IRQs in __und_usr before attempting to read the
instruction from user space.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Arun KS <getarunks@gmail.com>
Cc: Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ryan Mallon <rmallon@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/entry-armv.S
arch/arm/kernel/iwmmxt.S
arch/arm/mach-ep93xx/crunch-bits.S
arch/arm/vfp/entry.S