]> git.karo-electronics.de Git - karo-tx-linux.git/commit
s390: restore address space when returning to user space
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Fri, 17 Feb 2017 07:13:28 +0000 (08:13 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 23 Feb 2017 09:06:38 +0000 (10:06 +0100)
commitb5a882fcf146c87cb6b67c6df353e1c042b8773d
treea5c7d041f74567d24d44c17a1f80e86302d738d5
parent606aa4aa0b2c6d7c4f5d2e459922675ea1d7e459
s390: restore address space when returning to user space

Unbalanced set_fs usages (e.g. early exit from a function and a
forgotten set_fs(USER_DS) call) may lead to a situation where the
secondary asce is the kernel space asce when returning to user
space. This would allow user space to modify kernel space at will.

This would only be possible with the above mentioned kernel bug,
however we can detect this and fix the secondary asce before returning
to user space.

Therefore a new TIF_ASCE_SECONDARY which is used within set_fs. When
returning to user space check if TIF_ASCE_SECONDARY is set, which
would indicate a bug. If it is set print a message to the console,
fixup the secondary asce, and then return to user space.

This is similar to what is being discussed for x86 and arm:
"[RFC] syscalls: Restore address limit after a syscall".

Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/processor.h
arch/s390/include/asm/uaccess.h
arch/s390/kernel/entry.S
arch/s390/kernel/entry.h
arch/s390/kernel/process.c