[S390] Fixed handling of access register mode faults.
commit482b05dd533da162fa8d04c61712fae297bea3e0
authorGerald Schaefer <geraldsc@de.ibm.com>
Mon, 5 Mar 2007 22:35:54 +0000 (5 23:35 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 5 Mar 2007 22:35:54 +0000 (5 23:35 +0100)
treed8c93f1557927b7a00ca07c2e07b7de8b0fa7772
parent046f3e821f146d6c473edb033af15a0604957af8
[S390] Fixed handling of access register mode faults.

Replaced check_user_space() + __check_access_register with the new
check_space(). The old functions made wrong assumptions about kernel
and user space when the kernel and user address spaces are switched
(kernel in home space, user in primary/secondary space).
Secondly the user process can switch to the accress register mode if
it is running in primary or secondary mode. In addition it can load
an arbitrary value to the access registers. If any other value than
0 for primary space or 1 for secondary space is loaded and memory
is accessed using the base register related to the access register,
the program should be terminated with a SIGSEGV. To achieve that the
DUALD pointer in the DUCT and the PSALD pointer in the PASTE need
to point to an array of 8 invalid access-list entries to get a
ALEN-translation exception if an invalid alet is used.

Signed-off-by: Gerald Schaefer <geraldsc@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/head31.S
arch/s390/kernel/head64.S
arch/s390/mm/fault.c