diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2018-04-19 00:30:19 +0200 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2018-10-03 16:47:15 +0200 |
commit | 4cd2e0e70af6897ca2247fa1ffb1553ca16b4903 (patch) | |
tree | 55e54fb3ca4ea687448ffaddd34e8cb4366466d7 /kernel/ptrace.c | |
parent | signal: Remove the need for __ARCH_SI_PREABLE_SIZE and SI_PAD_SIZE (diff) | |
download | linux-4cd2e0e70af6897ca2247fa1ffb1553ca16b4903.tar.xz linux-4cd2e0e70af6897ca2247fa1ffb1553ca16b4903.zip |
signal: Introduce copy_siginfo_from_user and use it's return value
In preparation for using a smaller version of siginfo in the kernel
introduce copy_siginfo_from_user and use it when siginfo is copied from
userspace.
Make the pattern for using copy_siginfo_from_user and
copy_siginfo_from_user32 to capture the return value and return that
value on error.
This is a necessary prerequisite for using a smaller siginfo
in the kernel than the kernel exports to userspace.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'kernel/ptrace.c')
-rw-r--r-- | kernel/ptrace.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 45f77a1b9c97..a807ff5cc1a9 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -919,9 +919,8 @@ int ptrace_request(struct task_struct *child, long request, break; case PTRACE_SETSIGINFO: - if (copy_from_user(&siginfo, datavp, sizeof siginfo)) - ret = -EFAULT; - else + ret = copy_siginfo_from_user(&siginfo, datavp); + if (!ret) ret = ptrace_setsiginfo(child, &siginfo); break; @@ -1215,10 +1214,9 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request, break; case PTRACE_SETSIGINFO: - if (copy_siginfo_from_user32( - &siginfo, (struct compat_siginfo __user *) datap)) - ret = -EFAULT; - else + ret = copy_siginfo_from_user32( + &siginfo, (struct compat_siginfo __user *) datap); + if (!ret) ret = ptrace_setsiginfo(child, &siginfo); break; #ifdef CONFIG_HAVE_ARCH_TRACEHOOK |