aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2017-09-24 06:59:10 -0400
committerIngo Molnar <mingo@kernel.org>2017-09-26 03:43:47 -0400
commitaf2c4322d986a08a6e793b74b83a62b325019c20 (patch)
tree4844bcaf865d0528f03a38aa84e93ef653b01834
parentaf95774b3ca080b0e1e651c0fc7680f3444ddda7 (diff)
x86/fpu: Copy the full header in copy_user_to_xstate()
This is in preparation to verify the full xstate header as supplied by user-space. Signed-off-by: Eric Biggers <ebiggers@google.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Eric Biggers <ebiggers3@gmail.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Kees Cook <keescook@chromium.org> Cc: Kevin Hao <haokexin@gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Michael Halcrow <mhalcrow@google.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Wanpeng Li <wanpeng.li@hotmail.com> Cc: Yu-cheng Yu <yu-cheng.yu@intel.com> Cc: kernel-hardening@lists.openwall.com Link: http://lkml.kernel.org/r/20170924105913.9157-8-mingo@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/kernel/fpu/xstate.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
index 325db7850335..0cd7b73c25e8 100644
--- a/arch/x86/kernel/fpu/xstate.c
+++ b/arch/x86/kernel/fpu/xstate.c
@@ -1199,13 +1199,16 @@ int copy_user_to_xstate(struct xregs_state *xsave, const void __user *ubuf)
1199 int i; 1199 int i;
1200 u64 xfeatures; 1200 u64 xfeatures;
1201 u64 allowed_features; 1201 u64 allowed_features;
1202 struct xstate_header hdr;
1202 1203
1203 offset = offsetof(struct xregs_state, header); 1204 offset = offsetof(struct xregs_state, header);
1204 size = sizeof(xfeatures); 1205 size = sizeof(hdr);
1205 1206
1206 if (__copy_from_user(&xfeatures, ubuf + offset, size)) 1207 if (__copy_from_user(&hdr, ubuf + offset, size))
1207 return -EFAULT; 1208 return -EFAULT;
1208 1209
1210 xfeatures = hdr.xfeatures;
1211
1209 /* 1212 /*
1210 * Reject if the user sets any disabled or supervisor features: 1213 * Reject if the user sets any disabled or supervisor features:
1211 */ 1214 */