|
@@ -665,20 +665,22 @@ static int ptrace_peek_siginfo(struct task_struct *child,
|
|
|
if (unlikely(is_compat_task())) {
|
|
|
compat_siginfo_t __user *uinfo = compat_ptr(data);
|
|
|
|
|
|
- ret = copy_siginfo_to_user32(uinfo, &info);
|
|
|
- ret |= __put_user(info.si_code, &uinfo->si_code);
|
|
|
+ if (copy_siginfo_to_user32(uinfo, &info) ||
|
|
|
+ __put_user(info.si_code, &uinfo->si_code)) {
|
|
|
+ ret = -EFAULT;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
} else
|
|
|
#endif
|
|
|
{
|
|
|
siginfo_t __user *uinfo = (siginfo_t __user *) data;
|
|
|
|
|
|
- ret = copy_siginfo_to_user(uinfo, &info);
|
|
|
- ret |= __put_user(info.si_code, &uinfo->si_code);
|
|
|
- }
|
|
|
-
|
|
|
- if (ret) {
|
|
|
- ret = -EFAULT;
|
|
|
- break;
|
|
|
+ if (copy_siginfo_to_user(uinfo, &info) ||
|
|
|
+ __put_user(info.si_code, &uinfo->si_code)) {
|
|
|
+ ret = -EFAULT;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
data += sizeof(siginfo_t);
|