diff options
| -rw-r--r-- | kernel/ptrace.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index aed981a3f69c..335a7ae697f5 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
| @@ -665,20 +665,22 @@ static int ptrace_peek_siginfo(struct task_struct *child, | |||
| 665 | if (unlikely(is_compat_task())) { | 665 | if (unlikely(is_compat_task())) { |
| 666 | compat_siginfo_t __user *uinfo = compat_ptr(data); | 666 | compat_siginfo_t __user *uinfo = compat_ptr(data); |
| 667 | 667 | ||
| 668 | ret = copy_siginfo_to_user32(uinfo, &info); | 668 | if (copy_siginfo_to_user32(uinfo, &info) || |
| 669 | ret |= __put_user(info.si_code, &uinfo->si_code); | 669 | __put_user(info.si_code, &uinfo->si_code)) { |
| 670 | ret = -EFAULT; | ||
| 671 | break; | ||
| 672 | } | ||
| 673 | |||
| 670 | } else | 674 | } else |
| 671 | #endif | 675 | #endif |
| 672 | { | 676 | { |
| 673 | siginfo_t __user *uinfo = (siginfo_t __user *) data; | 677 | siginfo_t __user *uinfo = (siginfo_t __user *) data; |
| 674 | 678 | ||
| 675 | ret = copy_siginfo_to_user(uinfo, &info); | 679 | if (copy_siginfo_to_user(uinfo, &info) || |
| 676 | ret |= __put_user(info.si_code, &uinfo->si_code); | 680 | __put_user(info.si_code, &uinfo->si_code)) { |
| 677 | } | 681 | ret = -EFAULT; |
| 678 | 682 | break; | |
| 679 | if (ret) { | 683 | } |
| 680 | ret = -EFAULT; | ||
| 681 | break; | ||
| 682 | } | 684 | } |
| 683 | 685 | ||
| 684 | data += sizeof(siginfo_t); | 686 | data += sizeof(siginfo_t); |
