diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-09-24 03:14:56 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-10-24 11:16:57 -0400 |
commit | e258d719ff28ecc7a048eb8f78380e68c4b3a3f0 (patch) | |
tree | 1c7f496b97cef1111b230371940e603a2ca401a4 /arch/s390/kernel/signal.c | |
parent | 7d7c7b24e416afb2637be8447e03ca4457c100fd (diff) |
s390/uaccess: always run the kernel in home space
Simplify the uaccess code by removing the user_mode=home option.
The kernel will now always run in the home space mode.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/signal.c')
-rw-r--r-- | arch/s390/kernel/signal.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index c45becf82e01..b4fa7c0223e5 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c | |||
@@ -57,7 +57,7 @@ static int save_sigregs(struct pt_regs *regs, _sigregs __user *sregs) | |||
57 | 57 | ||
58 | /* Copy a 'clean' PSW mask to the user to avoid leaking | 58 | /* Copy a 'clean' PSW mask to the user to avoid leaking |
59 | information about whether PER is currently on. */ | 59 | information about whether PER is currently on. */ |
60 | user_sregs.regs.psw.mask = psw_user_bits | | 60 | user_sregs.regs.psw.mask = PSW_USER_BITS | |
61 | (regs->psw.mask & PSW_MASK_USER); | 61 | (regs->psw.mask & PSW_MASK_USER); |
62 | user_sregs.regs.psw.addr = regs->psw.addr; | 62 | user_sregs.regs.psw.addr = regs->psw.addr; |
63 | memcpy(&user_sregs.regs.gprs, ®s->gprs, sizeof(sregs->regs.gprs)); | 63 | memcpy(&user_sregs.regs.gprs, ®s->gprs, sizeof(sregs->regs.gprs)); |
@@ -85,12 +85,12 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs) | |||
85 | err = __copy_from_user(&user_sregs, sregs, sizeof(_sigregs)); | 85 | err = __copy_from_user(&user_sregs, sregs, sizeof(_sigregs)); |
86 | if (err) | 86 | if (err) |
87 | return err; | 87 | return err; |
88 | /* Use regs->psw.mask instead of psw_user_bits to preserve PER bit. */ | 88 | /* Use regs->psw.mask instead of PSW_USER_BITS to preserve PER bit. */ |
89 | regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) | | 89 | regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) | |
90 | (user_sregs.regs.psw.mask & PSW_MASK_USER); | 90 | (user_sregs.regs.psw.mask & PSW_MASK_USER); |
91 | /* Check for invalid user address space control. */ | 91 | /* Check for invalid user address space control. */ |
92 | if ((regs->psw.mask & PSW_MASK_ASC) >= (psw_kernel_bits & PSW_MASK_ASC)) | 92 | if ((regs->psw.mask & PSW_MASK_ASC) == PSW_ASC_HOME) |
93 | regs->psw.mask = (psw_user_bits & PSW_MASK_ASC) | | 93 | regs->psw.mask = PSW_ASC_PRIMARY | |
94 | (regs->psw.mask & ~PSW_MASK_ASC); | 94 | (regs->psw.mask & ~PSW_MASK_ASC); |
95 | /* Check for invalid amode */ | 95 | /* Check for invalid amode */ |
96 | if (regs->psw.mask & PSW_MASK_EA) | 96 | if (regs->psw.mask & PSW_MASK_EA) |
@@ -224,7 +224,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, | |||
224 | regs->gprs[15] = (unsigned long) frame; | 224 | regs->gprs[15] = (unsigned long) frame; |
225 | /* Force default amode and default user address space control. */ | 225 | /* Force default amode and default user address space control. */ |
226 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | | 226 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | |
227 | (psw_user_bits & PSW_MASK_ASC) | | 227 | (PSW_USER_BITS & PSW_MASK_ASC) | |
228 | (regs->psw.mask & ~PSW_MASK_ASC); | 228 | (regs->psw.mask & ~PSW_MASK_ASC); |
229 | regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE; | 229 | regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE; |
230 | 230 | ||
@@ -295,7 +295,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
295 | regs->gprs[15] = (unsigned long) frame; | 295 | regs->gprs[15] = (unsigned long) frame; |
296 | /* Force default amode and default user address space control. */ | 296 | /* Force default amode and default user address space control. */ |
297 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | | 297 | regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA | |
298 | (psw_user_bits & PSW_MASK_ASC) | | 298 | (PSW_USER_BITS & PSW_MASK_ASC) | |
299 | (regs->psw.mask & ~PSW_MASK_ASC); | 299 | (regs->psw.mask & ~PSW_MASK_ASC); |
300 | regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE; | 300 | regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE; |
301 | 301 | ||