aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/fpu/signal.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2021-09-08 15:29:32 +0200
committerBorislav Petkov <bp@suse.de>2021-09-14 21:10:03 +0200
commit052adee668284b67105375c0a524f16a423f1424 (patch)
treecf3805b1316cc5e219eac7a18e75003e48f264fe /arch/x86/kernel/fpu/signal.c
parentx86/fpu/signal: Move xstate clearing out of copy_fpregs_to_sigframe() (diff)
downloadlinux-dev-052adee668284b67105375c0a524f16a423f1424.tar.xz
linux-dev-052adee668284b67105375c0a524f16a423f1424.zip
x86/fpu/signal: Change return type of copy_fpstate_to_sigframe() to boolean
None of the call sites cares about the actual return code. Change the return type to boolean and return 'true' on success. Suggested-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lkml.kernel.org/r/20210908132525.736773588@linutronix.de
Diffstat (limited to 'arch/x86/kernel/fpu/signal.c')
-rw-r--r--arch/x86/kernel/fpu/signal.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c
index c4abbd97587b..7ce396dcc942 100644
--- a/arch/x86/kernel/fpu/signal.c
+++ b/arch/x86/kernel/fpu/signal.c
@@ -165,7 +165,7 @@ static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf)
* For [f]xsave state, update the SW reserved fields in the [f]xsave frame
* indicating the absence/presence of the extended state to the user.
*/
-int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
+bool copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
{
struct task_struct *tsk = current;
int ia32_fxstate = (buf != buf_fx);
@@ -176,13 +176,14 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
if (!static_cpu_has(X86_FEATURE_FPU)) {
struct user_i387_ia32_struct fp;
+
fpregs_soft_get(current, NULL, (struct membuf){.p = &fp,
.left = sizeof(fp)});
- return copy_to_user(buf, &fp, sizeof(fp)) ? -EFAULT : 0;
+ return !copy_to_user(buf, &fp, sizeof(fp));
}
if (!access_ok(buf, size))
- return -EACCES;
+ return false;
if (use_xsave()) {
struct xregs_state __user *xbuf = buf_fx;
@@ -191,9 +192,8 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
* Clear the xsave header first, so that reserved fields are
* initialized to zero.
*/
- ret = __clear_user(&xbuf->header, sizeof(xbuf->header));
- if (unlikely(ret))
- return ret;
+ if (__clear_user(&xbuf->header, sizeof(xbuf->header)))
+ return false;
}
retry:
/*
@@ -214,17 +214,17 @@ retry:
if (ret) {
if (!__clear_user(buf_fx, fpu_user_xstate_size))
goto retry;
- return -1;
+ return false;
}
/* Save the fsave header for the 32-bit frames. */
if ((ia32_fxstate || !use_fxsr()) && save_fsave_header(tsk, buf))
- return -1;
+ return false;
if (use_fxsr() && save_xstate_epilog(buf_fx, ia32_fxstate))
- return -1;
+ return false;
- return 0;
+ return true;
}
static int __restore_fpregs_from_user(void __user *buf, u64 xrestore,