lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 22 Feb 2016 14:42:54 -0800
From:	Andy Lutomirski <luto@...capital.net>
To:	Yu-cheng Yu <yu-cheng.yu@...el.com>
Cc:	X86 ML <x86@...nel.org>, "H. Peter Anvin" <hpa@...or.com>,
	Thomas Gleixner <tglx@...utronix.de>,
	Ingo Molnar <mingo@...hat.com>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	Dave Hansen <dave.hansen@...ux.intel.com>,
	Andy Lutomirski <luto@...nel.org>,
	Borislav Petkov <bp@...e.de>,
	Sai Praneeth Prakhya <sai.praneeth.prakhya@...el.com>,
	"Ravi V. Shankar" <ravi.v.shankar@...el.com>,
	Fenghua Yu <fenghua.yu@...el.com>
Subject: Re: [PATCH 04/10] x86/xsaves: Introduce a new check that allows
 correct xstates copy from kernel to user directly

On Mon, Feb 22, 2016 at 10:58 AM, Yu-cheng Yu <yu-cheng.yu@...el.com> wrote:
> XSAVES is a kernel instruction and uses a compacted format. When
> working with user space, the kernel should provide standard-format,
> non-supervisor state data. We cannot do __copy_to_user() from a compacted-
> format kernel xstate area to a signal frame.
>
> Note that the path to copy_fpstate_to_sigframe() does currently check if
> the thread has used FPU, but add a WARN_ONCE() there to detect any
> potential mis-use.
>
> Dave Hansen proposes this method to simplify copy xstate directly to user.
>
> Signed-off-by: Fenghua Yu <fenghua.yu@...el.com>
> Signed-off by: Yu-cheng Yu <yu-cheng.yu@...el.com>
> ---
>  arch/x86/kernel/fpu/signal.c | 41 ++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 40 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c
> index 0fbf60c..7676718 100644
> --- a/arch/x86/kernel/fpu/signal.c
> +++ b/arch/x86/kernel/fpu/signal.c
> @@ -130,6 +130,45 @@ static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf)
>         return err;
>  }
>
> +static int should_save_registers_directly(void)

I don't like the name of this function because:

> +{
> +       /*
> +        * In signal handling path, the kernel already checks if
> +        * FPU instructions have been used before it calls
> +        * copy_fpstate_to_sigframe(). We check this here again
> +        * to detect any potential mis-use and saving invalid
> +        * register values directly to a signal frame.
> +        */
> +       WARN_ONCE(!current->thread.fpu.fpstate_active,
> +                 "direct FPU save with no math use\n");

... Here "direct" seems to mean that we're asking whether to directly save ...

> +
> +       /*
> +        * In the case that we are using a compacted kernel
> +        * xsave area, we can not copy the thread.fpu.state
> +        * directly to userspace and *must* save it from the
> +        * registers directly.
> +        */

... and here "directly" means *both* copying directly to userspace and
saving using xsave directly.

So can you rename it to something with an obvious meaning like
"may_memcpy_fpu_regs" or similar?

--Andy

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ