aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/signal.c
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2013-09-24 03:14:56 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-10-24 11:16:57 -0400
commite258d719ff28ecc7a048eb8f78380e68c4b3a3f0 (patch)
tree1c7f496b97cef1111b230371940e603a2ca401a4 /arch/s390/kernel/signal.c
parent7d7c7b24e416afb2637be8447e03ca4457c100fd (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.c12
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, &regs->gprs, sizeof(sregs->regs.gprs)); 63 memcpy(&user_sregs.regs.gprs, &regs->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