projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
c26665a
)
x86/fpu: Set the xcomp_bv when we fake up a XSAVES area
author
Kevin Hao
<
[email protected]
>
Sun, 22 Jan 2017 08:50:23 +0000
(16:50 +0800)
committer
Thomas Gleixner
<
[email protected]
>
Mon, 23 Jan 2017 09:40:18 +0000
(10:40 +0100)
I got the following calltrace on a Apollo Lake SoC with 32-bit kernel:
WARNING: CPU: 2 PID: 261 at arch/x86/include/asm/fpu/internal.h:363 fpu__restore+0x1f5/0x260
[...]
Hardware name: Intel Corp. Broxton P/NOTEBOOK, BIOS APLIRVPA.X64.0138.B35.
1608091058
08/09/2016
Call Trace:
dump_stack()
__warn()
? fpu__restore()
warn_slowpath_null()
fpu__restore()
__fpu__restore_sig()
fpu__restore_sig()
restore_sigcontext.isra.9()
sys_sigreturn()
do_int80_syscall_32()
entry_INT80_32()
The reason is that a #GP occurs when executing XRSTORS. The root cause
is that we forget to set the xcomp_bv when we fake up the XSAVES area
in the copyin_to_xsaves() function.
Signed-off-by: Kevin Hao <
[email protected]
>
Cc: Andy Lutomirski <
[email protected]
>
Cc: Borislav Petkov <
[email protected]
>
Cc: Brian Gerst <
[email protected]
>
Cc: Dave Hansen <
[email protected]
>
Cc: Denys Vlasenko <
[email protected]
>
Cc: Fenghua Yu <
[email protected]
>
Cc: H. Peter Anvin <
[email protected]
>
Cc: Josh Poimboeuf <
[email protected]
>
Cc: Linus Torvalds <
[email protected]
>
Cc: Oleg Nesterov <
[email protected]
>
Cc: Peter Zijlstra <
[email protected]
>
Cc: Quentin Casasnovas <
[email protected]
>
Cc: Rik van Riel <
[email protected]
>
Cc: Thomas Gleixner <
[email protected]
>
Cc: Yu-cheng Yu <
[email protected]
>
Link:
http://lkml.kernel.org/r/
[email protected]
Signed-off-by: Ingo Molnar <
[email protected]
>
Signed-off-by: Thomas Gleixner <
[email protected]
>
arch/x86/kernel/fpu/xstate.c
patch
|
blob
|
history
diff --git
a/arch/x86/kernel/fpu/xstate.c
b/arch/x86/kernel/fpu/xstate.c
index 1d7770447b3ec1cd108a3ca8aec0bad3830fd3db..e287b9075527df16333c1bfadae9b51728c27e4a 100644
(file)
--- a/
arch/x86/kernel/fpu/xstate.c
+++ b/
arch/x86/kernel/fpu/xstate.c
@@
-1070,6
+1070,7
@@
int copyin_to_xsaves(const void *kbuf, const void __user *ubuf,
* Add back in the features that came in from userspace:
*/
xsave->header.xfeatures |= xfeatures;
+ xsave->header.xcomp_bv = XCOMP_BV_COMPACTED_FORMAT | xsave->header.xfeatures;
return 0;
}