|
@@ -130,57 +130,6 @@ static int restore_sigcontext32(struct pt_regs *regs,
|
|
return err ?: protected_restore_fp_context(sc);
|
|
return err ?: protected_restore_fp_context(sc);
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- *
|
|
|
|
- */
|
|
|
|
-extern void __put_sigset_unknown_nsig(void);
|
|
|
|
-extern void __get_sigset_unknown_nsig(void);
|
|
|
|
-
|
|
|
|
-static inline int put_sigset(const sigset_t *kbuf, compat_sigset_t __user *ubuf)
|
|
|
|
-{
|
|
|
|
- int err = 0;
|
|
|
|
-
|
|
|
|
- if (!access_ok(VERIFY_WRITE, ubuf, sizeof(*ubuf)))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- switch (_NSIG_WORDS) {
|
|
|
|
- default:
|
|
|
|
- __put_sigset_unknown_nsig();
|
|
|
|
- case 2:
|
|
|
|
- err |= __put_user(kbuf->sig[1] >> 32, &ubuf->sig[3]);
|
|
|
|
- err |= __put_user(kbuf->sig[1] & 0xffffffff, &ubuf->sig[2]);
|
|
|
|
- case 1:
|
|
|
|
- err |= __put_user(kbuf->sig[0] >> 32, &ubuf->sig[1]);
|
|
|
|
- err |= __put_user(kbuf->sig[0] & 0xffffffff, &ubuf->sig[0]);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return err;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static inline int get_sigset(sigset_t *kbuf, const compat_sigset_t __user *ubuf)
|
|
|
|
-{
|
|
|
|
- int err = 0;
|
|
|
|
- unsigned long sig[4];
|
|
|
|
-
|
|
|
|
- if (!access_ok(VERIFY_READ, ubuf, sizeof(*ubuf)))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- switch (_NSIG_WORDS) {
|
|
|
|
- default:
|
|
|
|
- __get_sigset_unknown_nsig();
|
|
|
|
- case 2:
|
|
|
|
- err |= __get_user(sig[3], &ubuf->sig[3]);
|
|
|
|
- err |= __get_user(sig[2], &ubuf->sig[2]);
|
|
|
|
- kbuf->sig[1] = sig[2] | (sig[3] << 32);
|
|
|
|
- case 1:
|
|
|
|
- err |= __get_user(sig[1], &ubuf->sig[1]);
|
|
|
|
- err |= __get_user(sig[0], &ubuf->sig[0]);
|
|
|
|
- kbuf->sig[0] = sig[0] | (sig[1] << 32);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return err;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Atomically swap in the new signal mask, and wait for a signal.
|
|
* Atomically swap in the new signal mask, and wait for a signal.
|
|
*/
|
|
*/
|