summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/fpu/regset.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/fpu/regset.c')
-rw-r--r--arch/x86/kernel/fpu/regset.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/x86/kernel/fpu/regset.c b/arch/x86/kernel/fpu/regset.c
index ec1404194b65..cb45dd81d617 100644
--- a/arch/x86/kernel/fpu/regset.c
+++ b/arch/x86/kernel/fpu/regset.c
@@ -134,10 +134,14 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset,
fpu__activate_fpstate_write(fpu);
- if (boot_cpu_has(X86_FEATURE_XSAVES))
- ret = copy_user_to_xstate(kbuf, ubuf, xsave);
- else
+ if (boot_cpu_has(X86_FEATURE_XSAVES)) {
+ if (kbuf)
+ ret = copy_kernel_to_xstate(kbuf, ubuf, xsave);
+ else
+ ret = copy_user_to_xstate(kbuf, ubuf, xsave);
+ } else {
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, xsave, 0, -1);
+ }
/*
* In case of failure, mark all states as init: