diff options
| -rw-r--r-- | arch/s390/kernel/compat_linux.c | 23 | ||||
| -rw-r--r-- | arch/s390/kernel/compat_signal.c | 28 |
2 files changed, 9 insertions, 42 deletions
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index 24b218737b9b..84a982898448 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
| @@ -362,12 +362,7 @@ asmlinkage long sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, | |||
| 362 | if (set) { | 362 | if (set) { |
| 363 | if (copy_from_user (&s32, set, sizeof(compat_sigset_t))) | 363 | if (copy_from_user (&s32, set, sizeof(compat_sigset_t))) |
| 364 | return -EFAULT; | 364 | return -EFAULT; |
| 365 | switch (_NSIG_WORDS) { | 365 | s.sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32); |
| 366 | case 4: s.sig[3] = s32.sig[6] | (((long)s32.sig[7]) << 32); | ||
| 367 | case 3: s.sig[2] = s32.sig[4] | (((long)s32.sig[5]) << 32); | ||
| 368 | case 2: s.sig[1] = s32.sig[2] | (((long)s32.sig[3]) << 32); | ||
| 369 | case 1: s.sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32); | ||
| 370 | } | ||
| 371 | } | 366 | } |
| 372 | set_fs (KERNEL_DS); | 367 | set_fs (KERNEL_DS); |
| 373 | ret = sys_rt_sigprocmask(how, | 368 | ret = sys_rt_sigprocmask(how, |
| @@ -377,12 +372,8 @@ asmlinkage long sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, | |||
| 377 | set_fs (old_fs); | 372 | set_fs (old_fs); |
| 378 | if (ret) return ret; | 373 | if (ret) return ret; |
| 379 | if (oset) { | 374 | if (oset) { |
| 380 | switch (_NSIG_WORDS) { | 375 | s32.sig[1] = (s.sig[0] >> 32); |
| 381 | case 4: s32.sig[7] = (s.sig[3] >> 32); s32.sig[6] = s.sig[3]; | 376 | s32.sig[0] = s.sig[0]; |
| 382 | case 3: s32.sig[5] = (s.sig[2] >> 32); s32.sig[4] = s.sig[2]; | ||
| 383 | case 2: s32.sig[3] = (s.sig[1] >> 32); s32.sig[2] = s.sig[1]; | ||
| 384 | case 1: s32.sig[1] = (s.sig[0] >> 32); s32.sig[0] = s.sig[0]; | ||
| 385 | } | ||
| 386 | if (copy_to_user (oset, &s32, sizeof(compat_sigset_t))) | 377 | if (copy_to_user (oset, &s32, sizeof(compat_sigset_t))) |
| 387 | return -EFAULT; | 378 | return -EFAULT; |
| 388 | } | 379 | } |
| @@ -401,12 +392,8 @@ asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set, | |||
| 401 | ret = sys_rt_sigpending((sigset_t __force __user *) &s, sigsetsize); | 392 | ret = sys_rt_sigpending((sigset_t __force __user *) &s, sigsetsize); |
| 402 | set_fs (old_fs); | 393 | set_fs (old_fs); |
| 403 | if (!ret) { | 394 | if (!ret) { |
| 404 | switch (_NSIG_WORDS) { | 395 | s32.sig[1] = (s.sig[0] >> 32); |
| 405 | case 4: s32.sig[7] = (s.sig[3] >> 32); s32.sig[6] = s.sig[3]; | 396 | s32.sig[0] = s.sig[0]; |
| 406 | case 3: s32.sig[5] = (s.sig[2] >> 32); s32.sig[4] = s.sig[2]; | ||
| 407 | case 2: s32.sig[3] = (s.sig[1] >> 32); s32.sig[2] = s.sig[1]; | ||
| 408 | case 1: s32.sig[1] = (s.sig[0] >> 32); s32.sig[0] = s.sig[0]; | ||
| 409 | } | ||
| 410 | if (copy_to_user (set, &s32, sizeof(compat_sigset_t))) | 397 | if (copy_to_user (set, &s32, sizeof(compat_sigset_t))) |
| 411 | return -EFAULT; | 398 | return -EFAULT; |
| 412 | } | 399 | } |
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index a1dc6457016c..c68ea9c18046 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
| @@ -213,16 +213,8 @@ sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, | |||
| 213 | ret = get_user(sa_handler, &act->sa_handler); | 213 | ret = get_user(sa_handler, &act->sa_handler); |
| 214 | ret |= __copy_from_user(&set32, &act->sa_mask, | 214 | ret |= __copy_from_user(&set32, &act->sa_mask, |
| 215 | sizeof(compat_sigset_t)); | 215 | sizeof(compat_sigset_t)); |
| 216 | switch (_NSIG_WORDS) { | 216 | new_ka.sa.sa_mask.sig[0] = |
| 217 | case 4: new_ka.sa.sa_mask.sig[3] = set32.sig[6] | 217 | set32.sig[0] | (((long)set32.sig[1]) << 32); |
| 218 | | (((long)set32.sig[7]) << 32); | ||
| 219 | case 3: new_ka.sa.sa_mask.sig[2] = set32.sig[4] | ||
| 220 | | (((long)set32.sig[5]) << 32); | ||
| 221 | case 2: new_ka.sa.sa_mask.sig[1] = set32.sig[2] | ||
| 222 | | (((long)set32.sig[3]) << 32); | ||
| 223 | case 1: new_ka.sa.sa_mask.sig[0] = set32.sig[0] | ||
| 224 | | (((long)set32.sig[1]) << 32); | ||
| 225 | } | ||
| 226 | ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); | 218 | ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); |
| 227 | 219 | ||
| 228 | if (ret) | 220 | if (ret) |
| @@ -233,20 +225,8 @@ sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, | |||
| 233 | ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); | 225 | ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); |
| 234 | 226 | ||
| 235 | if (!ret && oact) { | 227 | if (!ret && oact) { |
| 236 | switch (_NSIG_WORDS) { | 228 | set32.sig[1] = (old_ka.sa.sa_mask.sig[0] >> 32); |
| 237 | case 4: | 229 | set32.sig[0] = old_ka.sa.sa_mask.sig[0]; |
| 238 | set32.sig[7] = (old_ka.sa.sa_mask.sig[3] >> 32); | ||
| 239 | set32.sig[6] = old_ka.sa.sa_mask.sig[3]; | ||
| 240 | case 3: | ||
| 241 | set32.sig[5] = (old_ka.sa.sa_mask.sig[2] >> 32); | ||
| 242 | set32.sig[4] = old_ka.sa.sa_mask.sig[2]; | ||
| 243 | case 2: | ||
| 244 | set32.sig[3] = (old_ka.sa.sa_mask.sig[1] >> 32); | ||
| 245 | set32.sig[2] = old_ka.sa.sa_mask.sig[1]; | ||
| 246 | case 1: | ||
| 247 | set32.sig[1] = (old_ka.sa.sa_mask.sig[0] >> 32); | ||
| 248 | set32.sig[0] = old_ka.sa.sa_mask.sig[0]; | ||
| 249 | } | ||
| 250 | ret = put_user((unsigned long)old_ka.sa.sa_handler, &oact->sa_handler); | 230 | ret = put_user((unsigned long)old_ka.sa.sa_handler, &oact->sa_handler); |
| 251 | ret |= __copy_to_user(&oact->sa_mask, &set32, | 231 | ret |= __copy_to_user(&oact->sa_mask, &set32, |
| 252 | sizeof(compat_sigset_t)); | 232 | sizeof(compat_sigset_t)); |
