Re: FAILED: patch "[PATCH] x86/fpu: Reset state for all signal restore failures" failed to apply to 4.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 22, 2021 at 10:03:03PM +0200, Thomas Gleixner wrote:
> On Tue, Jun 22 2021 at 12:17, Greg KH wrote:
> 
> > On Mon, Jun 21, 2021 at 07:45:02PM +0200, Borislav Petkov wrote:
> >> On Mon, Jun 21, 2021 at 12:52:12PM +0200, gregkh@xxxxxxxxxxxxxxxxxxx wrote:
> >> > 
> >> > The patch below does not apply to the 4.4-stable tree.
> >> > If someone wants it applied there, or to any other stable or longterm
> >> > tree, then please email the backport, including the original git commit
> >> > id to <stable@xxxxxxxxxxxxxxx>.
> >> 
> >> Ok, how's this below?
> >> 
> >> It should at least capture the gist of what this commit is trying to
> >> achieve as the FPU mess has changed substantially since 4.4 so I'm
> >> really cautious here not to break any existing setups.
> >> 
> >> I've boot-tested this in a VM but Greg, I'd appreciate running it
> >> through some sort of stable testing framework if you're using one.
> >
> > This applied to 4.4.y and 4.9.y, but we still need a 4.14.y and 4.19.y
> > version if at all possible.
> 
> Everything is possible :)
> 
> ---
> Subject: x86/fpu: Reset state for all signal restore failures
> From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Date: Wed Jun  9 21:18:00 2021 +0200
> 
> From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> 
> commit efa165504943f2128d50f63de0c02faf6dcceb0d upstream
> 
> If access_ok() or fpregs_soft_set() fails in __fpu__restore_sig() then the
> function just returns but does not clear the FPU state as it does for all
> other fatal failures.
> 
> Clear the FPU state for these failures as well.
> 
> Fixes: 72a671ced66d ("x86, fpu: Unify signal handling code paths for x86 and x86_64 kernels")
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Signed-off-by: Borislav Petkov <bp@xxxxxxx>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Link: https://lkml.kernel.org/r/87mtryyhhz.ffs@xxxxxxxxxxxxxxxxxxxxxxx
> 
> ---
>  arch/x86/kernel/fpu/signal.c |   30 +++++++++++++++++++-----------
>  1 file changed, 19 insertions(+), 11 deletions(-)
> ---
> --- a/arch/x86/kernel/fpu/signal.c
> +++ b/arch/x86/kernel/fpu/signal.c
> @@ -281,15 +281,21 @@ static int __fpu__restore_sig(void __use
>  		return 0;
>  	}
>  
> -	if (!access_ok(VERIFY_READ, buf, size))
> -		return -EACCES;
> +	if (!access_ok(VERIFY_READ, buf, size)) {
> +		ret = -EACCES;
> +		goto out_err;
> +	}
>  
>  	fpu__initialize(fpu);
>  
> -	if (!static_cpu_has(X86_FEATURE_FPU))
> -		return fpregs_soft_set(current, NULL,
> -				       0, sizeof(struct user_i387_ia32_struct),
> -				       NULL, buf) != 0;
> +	if (!static_cpu_has(X86_FEATURE_FPU)) {
> +		ret = fpregs_soft_set(current, NULL,
> +				      0, sizeof(struct user_i387_ia32_struct),
> +				      NULL, buf) != 0;
> +		if (ret)
> +			goto out_err;
> +		return 0;
> +	}
>  
>  	if (use_xsave()) {
>  		struct _fpx_sw_bytes fx_sw_user;
> @@ -349,6 +355,7 @@ static int __fpu__restore_sig(void __use
>  		fpu__restore(fpu);
>  		local_bh_enable();
>  
> +		/* Failure is already handled */
>  		return err;
>  	} else {
>  		/*
> @@ -356,13 +363,14 @@ static int __fpu__restore_sig(void __use
>  		 * state to the registers directly (with exceptions handled).
>  		 */
>  		user_fpu_begin();
> -		if (copy_user_to_fpregs_zeroing(buf_fx, xfeatures, fx_only)) {
> -			fpu__clear(fpu);
> -			return -1;
> -		}
> +		if (!copy_user_to_fpregs_zeroing(buf_fx, xfeatures, fx_only))
> +			return 0;
> +		ret = -1;
>  	}
>  
> -	return 0;
> +out_err:
> +	fpu__clear(fpu);
> +	return ret;
>  }
>  
>  static inline int xstate_sigframe_size(void)

Hm, did you build this?

I get the following build error:
arch/x86/kernel/fpu/signal.c: In function ‘__fpu__restore_sig’:
arch/x86/kernel/fpu/signal.c:285:17: error: ‘ret’ undeclared (first use in this function); did you mean ‘net’?
  285 |                 ret = -EACCES;
      |                 ^~~
      |                 net
arch/x86/kernel/fpu/signal.c:285:17: note: each undeclared identifier is reported only once for each function it appears in
arch/x86/kernel/fpu/signal.c:374:1: warning: control reaches end of non-void function [-Wreturn-type]
  374 | }
      | ^

I'll fix it up, it's an "obvious" change :)

thanks,

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux