linux/arch/m68k/mm
Geert Uytterhoeven c3e1d75a1b m68k: Disable/restore interrupts in hwreg_present()/hwreg_write()
commit e4dc601bf9 upstream.

hwreg_present() and hwreg_write() temporarily change the VBR register to
another vector table. This table contains a valid bus error handler
only, all other entries point to arbitrary addresses.

If an interrupt comes in while the temporary table is active, the
processor will start executing at such an arbitrary address, and the
kernel will crash.

While most callers run early, before interrupts are enabled, or
explicitly disable interrupts, Finn Thain pointed out that macsonic has
one callsite that doesn't, causing intermittent boot crashes.
There's another unsafe callsite in hilkbd.

Fix this for good by disabling and restoring interrupts inside
hwreg_present() and hwreg_write().

Explicitly disabling interrupts can be removed from the callsites later.

Reported-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-10-30 09:38:21 -07:00
..
Makefile m68k: compile appropriate mm arch files for ColdFire MMU support 2011-12-30 10:20:39 +10:00
cache.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k 2012-01-26 12:43:57 -08:00
fault.c m68k: Convert arch/m68k/mm/fault.c to pr_*() 2013-12-30 21:01:10 +01:00
hwtest.c m68k: Disable/restore interrupts in hwreg_present()/hwreg_write() 2014-10-30 09:38:21 -07:00
init.c m68k/UAPI: Move generic definitions to <asm/bootinfo.h> 2013-11-26 11:09:16 +01:00
kmap.c m68k/mm: kmap spelling/grammar fixes 2013-12-30 21:01:11 +01:00
mcfmmu.c m68k: move to a single instance of free_initmem() 2012-11-14 08:50:56 +01:00
memory.c m68k: fix ColdFire clear cache operation 2012-07-17 15:49:34 +10:00
motorola.c m68k/UAPI: Move generic definitions to <asm/bootinfo.h> 2013-11-26 11:09:16 +01:00
sun3kmap.c m68k: missing exports 2007-07-20 08:24:49 -07:00
sun3mmu.c m68k: move to a single instance of free_initmem() 2012-11-14 08:50:56 +01:00