signal.c (e9331ee9b164d58b4dd0abc882ba7e23d2f404b3) | signal.c (f454322efbf6faee695f517c6b52c4dc03cacd3e) |
---|---|
1/* 2 * linux/kernel/signal.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 * 6 * 1997-11-02 Modified for POSIX.1b signals by Richard Henderson 7 * 8 * 2003-06-02 Jim Houston - Concurrent Computer Corp. --- 2607 unchanged lines hidden (view full) --- 2616 2617 sigset_from_compat(&new_set, &new32); 2618 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP)); 2619 2620 error = sigprocmask(how, &new_set, NULL); 2621 if (error) 2622 return error; 2623 } | 1/* 2 * linux/kernel/signal.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 * 6 * 1997-11-02 Modified for POSIX.1b signals by Richard Henderson 7 * 8 * 2003-06-02 Jim Houston - Concurrent Computer Corp. --- 2607 unchanged lines hidden (view full) --- 2616 2617 sigset_from_compat(&new_set, &new32); 2618 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP)); 2619 2620 error = sigprocmask(how, &new_set, NULL); 2621 if (error) 2622 return error; 2623 } |
2624 if (oset) { 2625 compat_sigset_t old32; 2626 sigset_to_compat(&old32, &old_set); 2627 if (copy_to_user(oset, &old32, sizeof(compat_sigset_t))) 2628 return -EFAULT; 2629 } 2630 return 0; | 2624 return oset ? put_compat_sigset(oset, &old_set, sizeof(*oset)) : 0; |
2631#else 2632 return sys_rt_sigprocmask(how, (sigset_t __user *)nset, 2633 (sigset_t __user *)oset, sigsetsize); 2634#endif 2635} 2636#endif 2637 2638static int do_sigpending(void *set, unsigned long sigsetsize) --- 25 unchanged lines hidden (view full) --- 2664 err = -EFAULT; 2665 return err; 2666} 2667 2668#ifdef CONFIG_COMPAT 2669COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset, 2670 compat_size_t, sigsetsize) 2671{ | 2625#else 2626 return sys_rt_sigprocmask(how, (sigset_t __user *)nset, 2627 (sigset_t __user *)oset, sigsetsize); 2628#endif 2629} 2630#endif 2631 2632static int do_sigpending(void *set, unsigned long sigsetsize) --- 25 unchanged lines hidden (view full) --- 2658 err = -EFAULT; 2659 return err; 2660} 2661 2662#ifdef CONFIG_COMPAT 2663COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset, 2664 compat_size_t, sigsetsize) 2665{ |
2672#ifdef __BIG_ENDIAN | |
2673 sigset_t set; 2674 int err = do_sigpending(&set, sigsetsize); | 2666 sigset_t set; 2667 int err = do_sigpending(&set, sigsetsize); |
2675 if (!err) { 2676 compat_sigset_t set32; 2677 sigset_to_compat(&set32, &set); 2678 /* we can get here only if sigsetsize <= sizeof(set) */ 2679 if (copy_to_user(uset, &set32, sigsetsize)) 2680 err = -EFAULT; 2681 } | 2668 if (!err) 2669 err = put_compat_sigset(uset, &set, sigsetsize); |
2682 return err; | 2670 return err; |
2683#else 2684 return sys_rt_sigpending((sigset_t __user *)uset, sigsetsize); 2685#endif | |
2686} 2687#endif 2688 2689enum siginfo_layout siginfo_layout(int sig, int si_code) 2690{ 2691 enum siginfo_layout layout = SIL_KILL; 2692 if ((si_code > SI_USER) && (si_code < SI_KERNEL)) { 2693 static const struct { --- 752 unchanged lines hidden (view full) --- 3446} 3447#ifdef CONFIG_COMPAT 3448COMPAT_SYSCALL_DEFINE4(rt_sigaction, int, sig, 3449 const struct compat_sigaction __user *, act, 3450 struct compat_sigaction __user *, oact, 3451 compat_size_t, sigsetsize) 3452{ 3453 struct k_sigaction new_ka, old_ka; | 2671} 2672#endif 2673 2674enum siginfo_layout siginfo_layout(int sig, int si_code) 2675{ 2676 enum siginfo_layout layout = SIL_KILL; 2677 if ((si_code > SI_USER) && (si_code < SI_KERNEL)) { 2678 static const struct { --- 752 unchanged lines hidden (view full) --- 3431} 3432#ifdef CONFIG_COMPAT 3433COMPAT_SYSCALL_DEFINE4(rt_sigaction, int, sig, 3434 const struct compat_sigaction __user *, act, 3435 struct compat_sigaction __user *, oact, 3436 compat_size_t, sigsetsize) 3437{ 3438 struct k_sigaction new_ka, old_ka; |
3454 compat_sigset_t mask; | |
3455#ifdef __ARCH_HAS_SA_RESTORER 3456 compat_uptr_t restorer; 3457#endif 3458 int ret; 3459 3460 /* XXX: Don't preclude handling different sized sigset_t's. */ 3461 if (sigsetsize != sizeof(compat_sigset_t)) 3462 return -EINVAL; 3463 3464 if (act) { 3465 compat_uptr_t handler; | 3439#ifdef __ARCH_HAS_SA_RESTORER 3440 compat_uptr_t restorer; 3441#endif 3442 int ret; 3443 3444 /* XXX: Don't preclude handling different sized sigset_t's. */ 3445 if (sigsetsize != sizeof(compat_sigset_t)) 3446 return -EINVAL; 3447 3448 if (act) { 3449 compat_uptr_t handler; |
3450 compat_sigset_t mask; |
|
3466 ret = get_user(handler, &act->sa_handler); 3467 new_ka.sa.sa_handler = compat_ptr(handler); 3468#ifdef __ARCH_HAS_SA_RESTORER 3469 ret |= get_user(restorer, &act->sa_restorer); 3470 new_ka.sa.sa_restorer = compat_ptr(restorer); 3471#endif 3472 ret |= copy_from_user(&mask, &act->sa_mask, sizeof(mask)); 3473 ret |= get_user(new_ka.sa.sa_flags, &act->sa_flags); 3474 if (ret) 3475 return -EFAULT; 3476 sigset_from_compat(&new_ka.sa.sa_mask, &mask); 3477 } 3478 3479 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); 3480 if (!ret && oact) { | 3451 ret = get_user(handler, &act->sa_handler); 3452 new_ka.sa.sa_handler = compat_ptr(handler); 3453#ifdef __ARCH_HAS_SA_RESTORER 3454 ret |= get_user(restorer, &act->sa_restorer); 3455 new_ka.sa.sa_restorer = compat_ptr(restorer); 3456#endif 3457 ret |= copy_from_user(&mask, &act->sa_mask, sizeof(mask)); 3458 ret |= get_user(new_ka.sa.sa_flags, &act->sa_flags); 3459 if (ret) 3460 return -EFAULT; 3461 sigset_from_compat(&new_ka.sa.sa_mask, &mask); 3462 } 3463 3464 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); 3465 if (!ret && oact) { |
3481 sigset_to_compat(&mask, &old_ka.sa.sa_mask); | |
3482 ret = put_user(ptr_to_compat(old_ka.sa.sa_handler), 3483 &oact->sa_handler); | 3466 ret = put_user(ptr_to_compat(old_ka.sa.sa_handler), 3467 &oact->sa_handler); |
3484 ret |= copy_to_user(&oact->sa_mask, &mask, sizeof(mask)); | 3468 ret |= put_compat_sigset(&oact->sa_mask, &old_ka.sa.sa_mask, 3469 sizeof(oact->sa_mask)); |
3485 ret |= put_user(old_ka.sa.sa_flags, &oact->sa_flags); 3486#ifdef __ARCH_HAS_SA_RESTORER 3487 ret |= put_user(ptr_to_compat(old_ka.sa.sa_restorer), 3488 &oact->sa_restorer); 3489#endif 3490 } 3491 return ret; 3492} --- 260 unchanged lines hidden --- | 3470 ret |= put_user(old_ka.sa.sa_flags, &oact->sa_flags); 3471#ifdef __ARCH_HAS_SA_RESTORER 3472 ret |= put_user(ptr_to_compat(old_ka.sa.sa_restorer), 3473 &oact->sa_restorer); 3474#endif 3475 } 3476 return ret; 3477} --- 260 unchanged lines hidden --- |