lkml.org 
[lkml]   [2021]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch 07/10] x86/fpu/signal: Change return type of fpu__restore_sig() to boolean
    Date
    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>
    ---
    arch/x86/ia32/ia32_signal.c | 2 +-
    arch/x86/include/asm/fpu/internal.h | 2 +-
    arch/x86/kernel/fpu/signal.c | 22 ++++++++++------------
    arch/x86/kernel/signal.c | 4 ++--
    4 files changed, 14 insertions(+), 16 deletions(-)

    --- a/arch/x86/ia32/ia32_signal.c
    +++ b/arch/x86/ia32/ia32_signal.c
    @@ -94,7 +94,7 @@ static bool ia32_restore_sigcontext(stru
    * 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)
    --- a/arch/x86/include/asm/fpu/internal.h
    +++ b/arch/x86/include/asm/fpu/internal.h
    @@ -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);
    --- a/arch/x86/kernel/fpu/signal.c
    +++ b/arch/x86/kernel/fpu/signal.c
    @@ -434,17 +434,17 @@ static inline int xstate_sigframe_size(v
    /*
    * 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) ||
    @@ -460,23 +460,21 @@ int fpu__restore_sig(void __user *buf, i
    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
    --- a/arch/x86/kernel/signal.c
    +++ b/arch/x86/kernel/signal.c
    @@ -136,8 +136,8 @@ static bool restore_sigcontext(struct pt
    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
    \
     
     \ /
      Last update: 2021-08-30 18:28    [W:4.099 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site