linux-stable-rt/arch
David S. Miller eeabac7386 sparc64: Validate kernel generated fault addresses on sparc64.
In order to handle all of the cases of address calculation overflow
properly, we run sparc 32-bit processes in "address masking" mode
when running on a 64-bit kernel.

Address masking mode zeros out the top 32-bits of the address
calculated for every load and store instruction.

However, when we're in privileged mode we have to run with that
address masking mode disabled even when accessing userspace from
the kernel.

To "simulate" the address masking mode we clear the top-bits by
hand for 32-bit processes in the fault handler.

It is the responsibility of code in the compat layer to properly
zero extend addresses used to access userspace.  If this isn't
followed properly we can get into a fault loop.

Say that the user address is 0xf0000000 but for whatever reason
the kernel code sign extends this to 64-bit, and then the kernel
tries to access the result.

In such a case we'll fault on address 0xfffffffff0000000 but the fault
handler will process that fault as if it were to address 0xf0000000.
We'll loop faulting forever because the fault never gets satisfied.

So add a check specifically for this case, when the kernel is faulting
on a user address access and the addresses don't match up.

This code path is sufficiently slow path, and this bug is sufficiently
painful to diagnose, that this kind of bug check is warranted.

Signed-off-by: David S. Miller <davem@davemloft.net>
2009-02-02 22:08:15 -08:00
..
alpha alpha: make pte_alloc_one_kernel() inline 2009-01-15 16:39:40 -08:00
arm Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-01-26 15:12:47 -08:00
avr32 eeprom: More consistent symbol names 2009-01-26 21:19:57 +01:00
blackfin eeprom: More consistent symbol names 2009-01-26 21:19:57 +01:00
cris Merge branch 'syscalls' of git://git390.osdl.marist.edu/pub/scm/linux-2.6 2009-01-14 19:58:40 -08:00
frv
h8300 Merge branch 'syscalls' of git://git390.osdl.marist.edu/pub/scm/linux-2.6 2009-01-14 19:58:40 -08:00
ia64 eeprom: More consistent symbol names 2009-01-26 21:19:57 +01:00
m32r eeprom: More consistent symbol names 2009-01-26 21:19:57 +01:00
m68k m68k{nommu}: fixups after the header move 2009-01-26 10:38:43 -08:00
m68knommu Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2009-01-26 10:33:01 -08:00
mips eeprom: More consistent symbol names 2009-01-26 21:19:57 +01:00
mn10300 [CVE-2009-0029] Rename old_readdir to sys_old_readdir 2009-01-14 14:15:15 +01:00
parisc byteorder: make swab.h include asm/swab.h like a regular header 2009-01-14 19:56:50 -08:00
powerpc eeprom: More consistent symbol names 2009-01-26 21:19:57 +01:00
s390 [S390] Add missing compat system call wrappers. 2009-01-23 16:40:29 +01:00
sh Merge branch 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6 2009-01-26 15:11:41 -08:00
sparc sparc64: Validate kernel generated fault addresses on sparc64. 2009-02-02 22:08:15 -08:00
um
x86 Merge branch 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6 2009-01-26 15:11:41 -08:00
xtensa byteorder: make swab.h include asm/swab.h like a regular header 2009-01-14 19:56:50 -08:00
.gitignore
Kconfig [CVE-2009-0029] System call wrapper infrastructure 2009-01-14 14:15:16 +01:00