x86/fpu/signal: Change return type of fpu__restore_sig() to boolean
authorThomas Gleixner <tglx@linutronix.de>
Wed, 8 Sep 2021 13:29:37 +0000 (15:29 +0200)
committerBorislav Petkov <bp@suse.de>
Tue, 14 Sep 2021 19:10:03 +0000 (21:10 +0200)
None of the call sites cares about the error code. All they need to know is
whether the function succeeded or not.

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.909065931@linutronix.de
arch/x86/ia32/ia32_signal.c
arch/x86/include/asm/fpu/internal.h
arch/x86/kernel/fpu/signal.c
arch/x86/kernel/signal.c

index 0d6789b..828ab0a 100644 (file)
@@ -94,7 +94,7 @@ static bool ia32_restore_sigcontext(struct pt_regs *regs,
         * normal case.
         */
        reload_segments(&sc);
-       return !fpu__restore_sig(compat_ptr(sc.fpstate), 1);
+       return fpu__restore_sig(compat_ptr(sc.fpstate), 1);
 }
 
 COMPAT_SYSCALL_DEFINE0(sigreturn)
index 74aa53e..89960e4 100644 (file)
@@ -26,7 +26,7 @@
 /*
  * High level FPU state handling functions:
  */
-extern int  fpu__restore_sig(void __user *buf, int ia32_frame);
+extern bool fpu__restore_sig(void __user *buf, int ia32_frame);
 extern void fpu__drop(struct fpu *fpu);
 extern void fpu__clear_user_states(struct fpu *fpu);
 extern int  fpu__exception_code(struct fpu *fpu, int trap_nr);
index 1d10fe9..d418d28 100644 (file)
@@ -433,17 +433,17 @@ static inline int xstate_sigframe_size(void)
 /*
  * Restore FPU state from a sigframe:
  */
-int fpu__restore_sig(void __user *buf, int ia32_frame)
+bool fpu__restore_sig(void __user *buf, int ia32_frame)
 {
        unsigned int size = xstate_sigframe_size();
        struct fpu *fpu = &current->thread.fpu;
        void __user *buf_fx = buf;
        bool ia32_fxstate = false;
-       int ret;
+       bool success = false;
 
        if (unlikely(!buf)) {
                fpu__clear_user_states(fpu);
-               return 0;
+               return true;
        }
 
        ia32_frame &= (IS_ENABLED(CONFIG_X86_32) ||
@@ -459,23 +459,21 @@ int fpu__restore_sig(void __user *buf, int ia32_frame)
                ia32_fxstate = true;
        }
 
-       if (!access_ok(buf, size)) {
-               ret = -EACCES;
+       if (!access_ok(buf, size))
                goto out;
-       }
 
        if (!IS_ENABLED(CONFIG_X86_64) && !cpu_feature_enabled(X86_FEATURE_FPU)) {
-               ret = fpregs_soft_set(current, NULL, 0,
-                                     sizeof(struct user_i387_ia32_struct),
-                                     NULL, buf);
+               success = !fpregs_soft_set(current, NULL, 0,
+                                          sizeof(struct user_i387_ia32_struct),
+                                          NULL, buf);
        } else {
-               ret = __fpu_restore_sig(buf, buf_fx, ia32_fxstate);
+               success = !__fpu_restore_sig(buf, buf_fx, ia32_fxstate);
        }
 
 out:
-       if (unlikely(ret))
+       if (unlikely(!success))
                fpu__clear_user_states(fpu);
-       return ret;
+       return success;
 }
 
 unsigned long
index 140b7b2..02ee68e 100644 (file)
@@ -136,8 +136,8 @@ static bool restore_sigcontext(struct pt_regs *regs,
                force_valid_ss(regs);
 #endif
 
-       return !fpu__restore_sig((void __user *)sc.fpstate,
-                                IS_ENABLED(CONFIG_X86_32));
+       return fpu__restore_sig((void __user *)sc.fpstate,
+                              IS_ENABLED(CONFIG_X86_32));
 }
 
 static __always_inline int