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>
This commit is contained in:
+5
-7
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user