Borislav Petkov
262e681183
x86/mce: Hide mca_cfg
...
Now that lguest is gone, put it in the internal header which should be
used only by MCA/RAS code.
Add missing header guards while at it.
No functional change.
Signed-off-by: Borislav Petkov <bp@suse.de >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Link: https://lkml.kernel.org/r/20171002092836.22971-3-bp@alien8.de
2017-10-05 14:23:06 +02:00
Jithu Joseph
3916a4135c
x86/intel_rdt: Remove redundant assignment
...
The assignment to the 'files' variable is immediately overwritten
in the following line. Remove the older assignment, which was meant
specifially for creating control groups files.
Fixes: c7d9aac613
("x86/intel_rdt/cqm: Add mkdir support for RDT monitoring")
Reported-by: Reinette Chatre <reinette.chatre@intel.com >
Signed-off-by: Jithu Joseph <jithu.joseph@intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Fenghua Yu <fenghua.yu@intel.com >
Cc: tony.luck@intel.com
Cc: vikas.shivappa@intel.com
Link: https://lkml.kernel.org/r/1507157337-18118-1-git-send-email-jithu.joseph@intel.com
2017-10-05 13:20:32 +02:00
Colin Ian King
5fd88b60e1
x86/intel_rdt/cqm: Make integer rmid_limbo_count static
...
rmid_limbo_count is local to the source and does not need to be in global
scope, so make it static.
Cleans up sparse warning:
symbol 'rmid_limbo_count' was not declared. Should it be static?
Signed-off-by: Colin Ian King <colin.king@canonical.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: kernel-janitors@vger.kernel.org
Link: https://lkml.kernel.org/r/20171002145931.27479-1-colin.king@canonical.com
2017-10-05 13:20:32 +02:00
Boqun Feng
a2b7861bb3
kvm/x86: Avoid async PF preempting the kernel incorrectly
...
Currently, in PREEMPT_COUNT=n kernel, kvm_async_pf_task_wait() could call
schedule() to reschedule in some cases. This could result in
accidentally ending the current RCU read-side critical section early,
causing random memory corruption in the guest, or otherwise preempting
the currently running task inside between preempt_disable and
preempt_enable.
The difficulty to handle this well is because we don't know whether an
async PF delivered in a preemptible section or RCU read-side critical section
for PREEMPT_COUNT=n, since preempt_disable()/enable() and rcu_read_lock/unlock()
are both no-ops in that case.
To cure this, we treat any async PF interrupting a kernel context as one
that cannot be preempted, preventing kvm_async_pf_task_wait() from choosing
the schedule() path in that case.
To do so, a second parameter for kvm_async_pf_task_wait() is introduced,
so that we know whether it's called from a context interrupting the
kernel, and the parameter is set properly in all the callsites.
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Wanpeng Li <wanpeng.li@hotmail.com >
Cc: stable@vger.kernel.org
Signed-off-by: Boqun Feng <boqun.feng@gmail.com >
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com >
2017-10-04 18:28:53 +02:00
Masami Hiramatsu
b664d57f39
kprobes/x86: Remove IRQ disabling from jprobe handlers
...
Jprobes actually don't need to disable IRQs while calling
handlers, because of how we specify the kernel interface in
Documentation/kprobes.txt:
-----
Probe handlers are run with preemption disabled. Depending on the
architecture and optimization state, handlers may also run with
interrupts disabled (e.g., kretprobe handlers and optimized kprobe
handlers run without interrupt disabled on x86/x86-64).
-----
So let's remove IRQ disabling from jprobes too.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Alexei Starovoitov <ast@fb.com >
Cc: Alexei Starovoitov <ast@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/150701508194.32266.14458959863314097305.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-10-03 19:11:48 +02:00
Josh Poimboeuf
ee213fc72f
kprobes/x86: Set up frame pointer in kprobe trampoline
...
Richard Weinberger saw an unwinder warning when running bcc's opensnoop:
WARNING: kernel stack frame pointer at ffff99ef4076bea0 in opensnoop:2008 has bad value 0000000000000008
unwind stack type:0 next_sp: (null) mask:0x2 graph_idx:0
...
ffff99ef4076be88: ffff99ef4076bea0 (0xffff99ef4076bea0)
ffff99ef4076be90: ffffffffac442721 (optimized_callback +0x81/0x90)
...
A lockdep stack trace was initiated from inside a kprobe handler, when
the unwinder noticed a bad frame pointer on the stack. The bad frame
pointer is related to the fact that the kprobe optprobe trampoline
doesn't save the frame pointer before calling into optimized_callback().
Reported-and-tested-by: Richard Weinberger <richard@sigma-star.at >
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Acked-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com >
Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com >
Cc: David S . Miller <davem@davemloft.net >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/7aef2f8ecd75c2f505ef9b80490412262cf4a44c.1507038547.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-10-03 19:11:27 +02:00
Jean Delvare
a1652bb8a0
x86/boot: Spell out "boot CPU" for BP
...
It's not obvious to everybody that BP stands for boot processor. At
least it was not for me. And BP is also a CPU register on x86, so it
is ambiguous. Spell out "boot CPU" everywhere instead.
Signed-off-by: Jean Delvare <jdelvare@suse.de >
Cc: Alok Kataria <akataria@vmware.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-10-03 18:41:23 +02:00
Linus Torvalds
368f89984b
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
...
Pull x86 fixes from Thomas Gleixner:
"This contains the following fixes and improvements:
- Avoid dereferencing an unprotected VMA pointer in the fault signal
generation code
- Fix inline asm call constraints for GCC 4.4
- Use existing register variable to retrieve the stack pointer
instead of forcing the compiler to create another indirect access
which results in excessive extra 'mov %rsp, %<dst>' instructions
- Disable branch profiling for the memory encryption code to prevent
an early boot crash
- Fix a sparse warning caused by casting the __user annotation in
__get_user_asm_u64() away
- Fix an off by one error in the loop termination of the error patch
in the x86 sysfs init code
- Add missing CPU IDs to various Intel specific drivers to enable the
functionality on recent hardware
- More (init) constification in the numachip code"
* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/asm: Use register variable to get stack pointer value
x86/mm: Disable branch profiling in mem_encrypt.c
x86/asm: Fix inline asm call constraints for GCC 4.4
perf/x86/intel/uncore: Correct num_boxes for IIO and IRP
perf/x86/intel/rapl: Add missing CPU IDs
perf/x86/msr: Add missing CPU IDs
perf/x86/intel/cstate: Add missing CPU IDs
x86: Don't cast away the __user in __get_user_asm_u64()
x86/sysfs: Fix off-by-one error in loop termination
x86/mm: Fix fault error path using unsafe vma pointer
x86/numachip: Add const and __initconst to numachip2_clockevent
2017-10-01 13:55:32 -07:00
Linus Torvalds
42057e1825
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
...
Pull kvm fixes from Paolo Bonzini:
"Mixed bugfixes. Perhaps the most interesting one is a latent bug that
was finally triggered by PCID support"
* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
kvm/x86: Handle async PF in RCU read-side critical sections
KVM: nVMX: Fix nested #PF intends to break L1's vmlauch/vmresume
KVM: VMX: use cmpxchg64
KVM: VMX: simplify and fix vmx_vcpu_pi_load
KVM: VMX: avoid double list add with VT-d posted interrupts
KVM: VMX: extract __pi_post_block
KVM: PPC: Book3S HV: Check for updated HDSISR on P9 HDSI exception
KVM: nVMX: fix HOST_CR3/HOST_CR4 cache
2017-09-29 12:18:55 -07:00
Vlastimil Babka
77072f09ea
x86/stacktrace: Avoid recording save_stack_trace() wrappers
...
The save_stack_trace() and save_stack_trace_tsk() wrappers of
__save_stack_trace() add themselves to the call stack, and thus appear in the
recorded stacktraces. This is redundant and wasteful when we have limited space
to record the useful part of the backtrace with e.g. page_owner functionality.
Fix this by making sure __save_stack_trace() is noinline (which matches the
current gcc decision) and bumping the skip in the wrappers
(save_stack_trace_tsk() only when called for the current task). This is similar
to what was done for arm in 3683f44c42
("ARM: stacktrace: avoid listing
stacktrace functions in stacktrace") and is pending for arm64.
Also make sure that __save_stack_trace_reliable() doesn't get this problem in
the future by marking it __always_inline (which matches current gcc decision),
per Josh Poimboeuf.
Signed-off-by: Vlastimil Babka <vbabka@suse.cz >
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Miroslav Benes <mbenes@suse.cz >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20170929092335.2744-1-vbabka@suse.cz
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-29 19:44:03 +02:00
Andrey Ryabinin
196bd485ee
x86/asm: Use register variable to get stack pointer value
...
Currently we use current_stack_pointer() function to get the value
of the stack pointer register. Since commit:
f5caf621ee
("x86/asm: Fix inline asm call constraints for Clang")
... we have a stack register variable declared. It can be used instead of
current_stack_pointer() function which allows to optimize away some
excessive "mov %rsp, %<dst>" instructions:
-mov %rsp,%rdx
-sub %rdx,%rax
-cmp $0x3fff,%rax
-ja ffffffff810722fd <ist_begin_non_atomic+0x2d>
+sub %rsp,%rax
+cmp $0x3fff,%rax
+ja ffffffff810722fa <ist_begin_non_atomic+0x2a>
Remove current_stack_pointer(), rename __asm_call_sp to current_stack_pointer
and use it instead of the removed function.
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com >
Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20170929141537.29167-1-aryabinin@virtuozzo.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-29 19:39:44 +02:00
Boqun Feng
b862789aa5
kvm/x86: Handle async PF in RCU read-side critical sections
...
Sasha Levin reported a WARNING:
| WARNING: CPU: 0 PID: 6974 at kernel/rcu/tree_plugin.h:329
| rcu_preempt_note_context_switch kernel/rcu/tree_plugin.h:329 [inline]
| WARNING: CPU: 0 PID: 6974 at kernel/rcu/tree_plugin.h:329
| rcu_note_context_switch+0x16c/0x2210 kernel/rcu/tree.c:458
...
| CPU: 0 PID: 6974 Comm: syz-fuzzer Not tainted 4.13.0-next-20170908+ #246
| Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
| 1.10.1-1ubuntu1 04/01/2014
| Call Trace:
...
| RIP: 0010:rcu_preempt_note_context_switch kernel/rcu/tree_plugin.h:329 [inline]
| RIP: 0010:rcu_note_context_switch+0x16c/0x2210 kernel/rcu/tree.c:458
| RSP: 0018:ffff88003b2debc8 EFLAGS: 00010002
| RAX: 0000000000000001 RBX: 1ffff1000765bd85 RCX: 0000000000000000
| RDX: 1ffff100075d7882 RSI: ffffffffb5c7da20 RDI: ffff88003aebc410
| RBP: ffff88003b2def30 R08: dffffc0000000000 R09: 0000000000000001
| R10: 0000000000000000 R11: 0000000000000000 R12: ffff88003b2def08
| R13: 0000000000000000 R14: ffff88003aebc040 R15: ffff88003aebc040
| __schedule+0x201/0x2240 kernel/sched/core.c:3292
| schedule+0x113/0x460 kernel/sched/core.c:3421
| kvm_async_pf_task_wait+0x43f/0x940 arch/x86/kernel/kvm.c:158
| do_async_page_fault+0x72/0x90 arch/x86/kernel/kvm.c:271
| async_page_fault+0x22/0x30 arch/x86/entry/entry_64.S:1069
| RIP: 0010:format_decode+0x240/0x830 lib/vsprintf.c:1996
| RSP: 0018:ffff88003b2df520 EFLAGS: 00010283
| RAX: 000000000000003f RBX: ffffffffb5d1e141 RCX: ffff88003b2df670
| RDX: 0000000000000001 RSI: dffffc0000000000 RDI: ffffffffb5d1e140
| RBP: ffff88003b2df560 R08: dffffc0000000000 R09: 0000000000000000
| R10: ffff88003b2df718 R11: 0000000000000000 R12: ffff88003b2df5d8
| R13: 0000000000000064 R14: ffffffffb5d1e140 R15: 0000000000000000
| vsnprintf+0x173/0x1700 lib/vsprintf.c:2136
| sprintf+0xbe/0xf0 lib/vsprintf.c:2386
| proc_self_get_link+0xfb/0x1c0 fs/proc/self.c:23
| get_link fs/namei.c:1047 [inline]
| link_path_walk+0x1041/0x1490 fs/namei.c:2127
...
This happened when the host hit a page fault, and delivered it as in an
async page fault, while the guest was in an RCU read-side critical
section. The guest then tries to reschedule in kvm_async_pf_task_wait(),
but rcu_preempt_note_context_switch() would treat the reschedule as a
sleep in RCU read-side critical section, which is not allowed (even in
preemptible RCU). Thus the WARN.
To cure this, make kvm_async_pf_task_wait() go to the halt path if the
PF happens in a RCU read-side critical section.
Reported-by: Sasha Levin <levinsasha928@gmail.com >
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: stable@vger.kernel.org
Signed-off-by: Boqun Feng <boqun.feng@gmail.com >
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com >
2017-09-29 17:05:17 +02:00
Colin Ian King
79761ce80a
x86/apic: Fix spelling mistake: "symmectic" -> "symmetric"
...
Trivial fix to spelling mistakes in pr_info messages
Signed-off-by: Colin Ian King <colin.king@canonical.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Dou Liyang <douly.fnst@cn.fujitsu.com >
Link: https://lkml.kernel.org/r/20170927102223.31920-1-colin.king@canonical.com
2017-09-28 12:22:40 +02:00
Josh Poimboeuf
2704fbb672
x86/head: Add unwind hint annotations
...
Jiri Slaby reported an ORC issue when unwinding from an idle task. The
stack was:
ffffffff811083c2 do_idle+0x142/0x1e0
ffffffff8110861d cpu_startup_entry+0x5d/0x60
ffffffff82715f58 start_kernel+0x3ff/0x407
ffffffff827153e8 x86_64_start_kernel+0x14e/0x15d
ffffffff810001bf secondary_startup_64+0x9f/0xa0
The ORC unwinder errored out at secondary_startup_64 because the head
code isn't annotated yet so there wasn't a corresponding ORC entry.
Fix that and any other head-related unwinding issues by adding unwind
hints to the head code.
Reported-by: Jiri Slaby <jslaby@suse.cz >
Tested-by: Jiri Slaby <jslaby@suse.cz >
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/78ef000a2f68f545d6eef44ee912edceaad82ccf.1505764066.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:39:04 +02:00
Josh Poimboeuf
e93db75a00
x86/boot: Annotate verify_cpu() as a callable function
...
verify_cpu() is a callable function. Annotate it as such.
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/293024b8a080832075312f38c07ccc970fc70292.1505764066.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:39:03 +02:00
Josh Poimboeuf
015a2ea547
x86/head: Fix head ELF function annotations
...
These functions aren't callable C-type functions, so don't annotate them
as such.
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/36eb182738c28514f8bf95e403d89b6413a88883.1505764066.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:39:03 +02:00
Josh Poimboeuf
a8b88e84d1
x86/head: Remove unused 'bad_address' code
...
It's no longer possible for this code to be executed, so remove it.
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/32a46fe92d2083700599b36872b26e7dfd7b7965.1505764066.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:39:03 +02:00
Josh Poimboeuf
17270717e8
x86/head: Remove confusing comment
...
This comment is actively wrong and confusing. It refers to the
registers' stack offsets after the pt_regs has been constructed on the
stack, but this code is *before* that.
At this point the stack just has the standard iret frame, for which no
comment should be needed.
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Jiri Slaby <jslaby@suse.cz >
Cc: Juergen Gross <jgross@suse.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/a3c267b770fc56c9b86df9c11c552848248aace2.1505764066.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:39:02 +02:00
Masami Hiramatsu
a19b2e3d78
kprobes/x86: Remove IRQ disabling from ftrace-based/optimized kprobes
...
Kkprobes don't need to disable IRQs if they are called from the
ftrace/jump trampoline code, because Documentation/kprobes.txt says:
-----
Probe handlers are run with preemption disabled. Depending on the
architecture and optimization state, handlers may also run with
interrupts disabled (e.g., kretprobe handlers and optimized kprobe
handlers run without interrupt disabled on x86/x86-64).
-----
So let's remove IRQ disabling from those handlers.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Alexei Starovoitov <ast@fb.com >
Cc: Alexei Starovoitov <ast@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/150581534039.32348.11331736206004264553.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:25:50 +02:00
Masami Hiramatsu
5bb4fc2d86
kprobes/x86: Disable preemption in ftrace-based jprobes
...
Disable preemption in ftrace-based jprobe handlers as
described in Documentation/kprobes.txt:
"Probe handlers are run with preemption disabled."
This will fix jprobes behavior when CONFIG_PREEMPT=y.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Alexei Starovoitov <ast@fb.com >
Cc: Alexei Starovoitov <ast@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/150581530024.32348.9863783558598926771.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:23:04 +02:00
Masami Hiramatsu
9a09f261a4
kprobes/x86: Disable preemption in optprobe
...
Disable preemption in optprobe handler as described
in Documentation/kprobes.txt, which says:
"Probe handlers are run with preemption disabled."
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Alexei Starovoitov <ast@fb.com >
Cc: Alexei Starovoitov <ast@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/150581525942.32348.6359217983269060829.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:23:04 +02:00
Masami Hiramatsu
cd52edad55
kprobes/x86: Move the get_kprobe_ctlblk() into irq-disabled block
...
Since get_kprobe_ctlblk() accesses per-cpu variables
which calls smp_processor_id(), it must be called under
preempt-disabled or irq-disabled.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Alexei Starovoitov <ast@fb.com >
Cc: Alexei Starovoitov <ast@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/150581517952.32348.2655896843219158446.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:23:03 +02:00
Masami Hiramatsu
a8976fc84b
kprobes/x86: Remove addressof() operators
...
The following commit:
54a7d50b92
("x86: mark kprobe templates as character arrays, not single characters")
changed optprobe_template_* to arrays, so we can remove the addressof()
operators from those symbols.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com >
Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com >
Cc: David S . Miller <davem@davemloft.net >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/150304469798.17009.15886717935027472863.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:23:03 +02:00
Masami Hiramatsu
63fef14fc9
kprobes/x86: Make insn buffer always ROX and use text_poke()
...
Make insn buffer always ROX and use text_poke() to write
the copied instructions instead of set_memory_*().
This makes instruction buffer stronger against other
kernel subsystems because there is no window time
to modify the buffer.
Suggested-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com >
Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com >
Cc: David S . Miller <davem@davemloft.net >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/150304463032.17009.14195368040691676813.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-28 09:23:03 +02:00
Tony Luck
cfd0f34e4c
x86/intel_rdt: Add diagnostics when making directories
...
Mostly this is about running out of RMIDs or CLOSIDs. Other
errors are various internal errors.
Signed-off-by: Tony Luck <tony.luck@intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Vikas Shivappa <vikas.shivappa@intel.com >
Cc: Boris Petkov <bp@suse.de >
Cc: Reinette Chatre <reinette.chatre@intel.com >
Link: https://lkml.kernel.org/r/027cf1ffb3a3695f2d54525813a1d644887353cf.1506382469.git.tony.luck@intel.com
2017-09-27 12:10:11 +02:00
Tony Luck
94457b36e8
x86/intel_rdt: Add diagnostics when writing the cpus file
...
Can't add a cpu to a monitor group unless it belongs to parent
group. Can't delete cpus from the default group.
Signed-off-by: Tony Luck <tony.luck@intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Vikas Shivappa <vikas.shivappa@intel.com >
Cc: Boris Petkov <bp@suse.de >
Cc: Reinette Chatre <reinette.chatre@intel.com >
Link: https://lkml.kernel.org/r/757a869a25e9fc1b7a2e9bc43e1159455c1964a0.1506382469.git.tony.luck@intel.com
2017-09-27 12:10:11 +02:00
Tony Luck
29e74f35b2
x86/intel_rdt: Add diagnostics when writing the tasks file
...
About the only tricky case is trying to move a task into a monitor
group that is a subdirectory of a different control group. But cover
the simple cases too.
Signed-off-by: Tony Luck <tony.luck@intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Vikas Shivappa <vikas.shivappa@intel.com >
Cc: Boris Petkov <bp@suse.de >
Cc: Reinette Chatre <reinette.chatre@intel.com >
Link: https://lkml.kernel.org/r/f1841cce6a242aed37cb926dee8942727331bf78.1506382469.git.tony.luck@intel.com
2017-09-27 12:10:10 +02:00
Tony Luck
c377dcfbee
x86/intel_rdt: Add diagnostics when writing the schemata file
...
Save helpful descriptions of what went wrong when writing a
schemata file.
Signed-off-by: Tony Luck <tony.luck@intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Vikas Shivappa <vikas.shivappa@intel.com >
Cc: Boris Petkov <bp@suse.de >
Cc: Reinette Chatre <reinette.chatre@intel.com >
Link: https://lkml.kernel.org/r/9d6cef757dc88639c8ab47f1e7bc1b081a84bb88.1506382469.git.tony.luck@intel.com
2017-09-27 12:10:10 +02:00
Tony Luck
9b3a7fd0f5
x86/intel_rdt: Add framework for better RDT UI diagnostics
...
Commands are given to the resctrl file system by making/removing
directories, or by writing to files. When something goes wrong
the user is generally left wondering why they got:
bash: echo: write error: Invalid argument
Add a new file "last_cmd_status" to the "info" directory that
will give the user some better clues on what went wrong.
Provide functions to clear and update last_cmd_status which
check that we hold the rdtgroup_mutex.
[ tglx: Made last_cmd_status static and folded back the hunk from patch 3
which replaces the open coded access to last_cmd_status with the
accessor function ]
Signed-off-by: Tony Luck <tony.luck@intel.com >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Vikas Shivappa <vikas.shivappa@intel.com >
Cc: Boris Petkov <bp@suse.de >
Cc: Reinette Chatre <reinette.chatre@intel.com >
Link: https://lkml.kernel.org/r/edc4e0e9741eee89bba569f0021b1b2662fd9508.1506382469.git.tony.luck@intel.com
2017-09-27 12:10:10 +02:00
Borislav Petkov
1e66e2b862
x86/apic: Use dead_cpu instead of current CPU when cleaning up
...
x2apic_dead_cpu() cleans up the leftovers of a CPU which got unplugged, but
instead of clearing the dead cpu bit in the cluster mask it clears the
current (alive) cpu bit. Noticed because smp_processor_id() is called in
preemptible code and triggers a debug warning.
[ tglx: Rewrote changelog ]
Fixes: 023a611748
("x86/apic/x2apic: Simplify cluster management")
Signed-off-by: Borislav Petkov <bp@suse.de >
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Link: https://lkml.kernel.org/r/20170926170845.13955-1-bp@alien8.de
2017-09-27 09:37:41 +02:00
Ingo Molnar
8474c532b5
Merge branch 'WIP.x86/fpu' into x86/fpu, because it's ready
...
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 10:17:43 +02:00
Eric Biggers
738f48cb5f
x86/fpu: Use using_compacted_format() instead of open coded X86_FEATURE_XSAVES
...
This is the canonical method to use.
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-11-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:48 +02:00
Eric Biggers
98c0fad9d6
x86/fpu: Use validate_xstate_header() to validate the xstate_header in copy_user_to_xstate()
...
Tighten the checks in copy_user_to_xstate().
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-10-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:48 +02:00
Eric Biggers
3d703477bc
x86/fpu: Eliminate the 'xfeatures' local variable in copy_user_to_xstate()
...
We now have this field in hdr.xfeatures.
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-9-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:48 +02:00
Eric Biggers
af2c4322d9
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 >
2017-09-26 09:43:47 +02:00
Eric Biggers
af95774b3c
x86/fpu: Use validate_xstate_header() to validate the xstate_header in copy_kernel_to_xstate()
...
Tighten the checks in copy_kernel_to_xstate().
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-7-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:47 +02:00
Eric Biggers
b89eda482d
x86/fpu: Eliminate the 'xfeatures' local variable in copy_kernel_to_xstate()
...
We have this information in the xstate_header.
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-6-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:46 +02:00
Eric Biggers
80d8ae86b3
x86/fpu: Copy the full state_header in copy_kernel_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-5-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:46 +02:00
Eric Biggers
b11e2e18a7
x86/fpu: Use validate_xstate_header() to validate the xstate_header in __fpu__restore_sig()
...
Tighten the checks in __fpu__restore_sig() and update comments.
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-4-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:46 +02:00
Eric Biggers
cf9df81b13
x86/fpu: Use validate_xstate_header() to validate the xstate_header in xstateregs_set()
...
Tighten the checks in xstateregs_set().
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-3-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:45 +02:00
Eric Biggers
e63e5d5c15
x86/fpu: Introduce validate_xstate_header()
...
Move validation of user-supplied xstate_header into a helper function,
in preparation of calling it from both the ptrace and sigreturn syscall
paths.
The new function also considers it to be an error if *any* reserved bits
are set, whereas before we were just clearing most of them silently.
This should reduce the chance of bugs that fail to correctly validate
user-supplied XSAVE areas. It also will expose any broken userspace
programs that set the other reserved bits; this is desirable because
such programs will lose compatibility with future CPUs and kernels if
those bits are ever used for anything. (There shouldn't be any such
programs, and in fact in the case where the compacted format is in use
we were already validating xfeatures. But you never know...)
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-2-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:45 +02:00
Ingo Molnar
369a036de2
x86/fpu: Rename fpu__activate_fpstate_read/write() to fpu__prepare_[read|write]()
...
As per the new nomenclature we don't 'activate' the FPU state
anymore, we initialize it. So drop the _activate_fpstate name
from these functions, which were a bit of a mouthful anyway,
and name them:
fpu__prepare_read()
fpu__prepare_write()
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Eric Biggers <ebiggers3@gmail.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:44 +02:00
Ingo Molnar
2ce03d850b
x86/fpu: Rename fpu__activate_curr() to fpu__initialize()
...
Rename this function to better express that it's all about
initializing the FPU state of a task which goes hand in hand
with the fpu::initialized field.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Eric Biggers <ebiggers3@gmail.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
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: Yu-cheng Yu <yu-cheng.yu@intel.com >
Link: http://lkml.kernel.org/r/20170923130016.21448-33-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:44 +02:00
Ingo Molnar
e10078eba6
x86/fpu: Simplify and speed up fpu__copy()
...
fpu__copy() has a preempt_disable()/enable() pair, which it had to do to
be able to atomically unlazy the current task when doing an FNSAVE.
But we don't unlazy tasks anymore, we always do direct saves/restores of
FPU context.
So remove both the unnecessary critical section, and update the comments.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Eric Biggers <ebiggers3@gmail.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
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: Yu-cheng Yu <yu-cheng.yu@intel.com >
Link: http://lkml.kernel.org/r/20170923130016.21448-32-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:44 +02:00
Ingo Molnar
7f1487c59b
x86/fpu: Fix stale comments about lazy FPU logic
...
We don't do any lazy restore anymore, what we have are two pieces of optimization:
- no-FPU tasks that don't save/restore the FPU context (kernel threads are such)
- cached FPU registers maintained via the fpu->last_cpu field. This means that
if an FPU task context switches to a non-FPU task then we can maintain the
FPU registers as an in-FPU copies (cache), and skip the restoration of them
once we switch back to the original FPU-using task.
Update all the comments that still referred to old 'lazy' and 'unlazy' concepts.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Eric Biggers <ebiggers3@gmail.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
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: Yu-cheng Yu <yu-cheng.yu@intel.com >
Link: http://lkml.kernel.org/r/20170923130016.21448-31-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:43 +02:00
Ingo Molnar
e4a81bfcaa
x86/fpu: Rename fpu::fpstate_active to fpu::initialized
...
The x86 FPU code used to have a complex state machine where both the FPU
registers and the FPU state context could be 'active' (or inactive)
independently of each other - which enabled features like lazy FPU restore.
Much of this complexity is gone in the current code: now we basically can
have FPU-less tasks (kernel threads) that don't use (and save/restore) FPU
state at all, plus full FPU users that save/restore directly with no laziness
whatsoever.
But the fpu::fpstate_active still carries bits of the old complexity - meanwhile
this flag has become a simple flag that shows whether the FPU context saving
area in the thread struct is initialized and used, or not.
Rename it to fpu::initialized to express this simplicity in the name as well.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Eric Biggers <ebiggers3@gmail.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
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: Yu-cheng Yu <yu-cheng.yu@intel.com >
Link: http://lkml.kernel.org/r/20170923130016.21448-30-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:43:36 +02:00
Ingo Molnar
685c930d6e
x86/fpu: Remove fpu__current_fpstate_write_begin/end()
...
These functions are not used anymore, so remove them.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Bobby Powers <bobbypowers@gmail.com >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Eric Biggers <ebiggers3@gmail.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
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: Yu-cheng Yu <yu-cheng.yu@intel.com >
Link: http://lkml.kernel.org/r/20170923130016.21448-29-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:42:20 +02:00
Ingo Molnar
4618e90965
x86/fpu: Fix fpu__activate_fpstate_read() and update comments
...
fpu__activate_fpstate_read() can be called for the current task
when coredumping - or for stopped tasks when ptrace-ing.
Implement this properly in the code and update the comments.
This also fixes an incorrect (but harmless) warning introduced by
one of the earlier patches.
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Eric Biggers <ebiggers3@gmail.com >
Cc: Fenghua Yu <fenghua.yu@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
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: Yu-cheng Yu <yu-cheng.yu@intel.com >
Link: http://lkml.kernel.org/r/20170923130016.21448-28-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2017-09-26 09:41:09 +02:00
Thomas Gleixner
d6ffc6ac83
x86/vector: Respect affinity mask in irq descriptor
...
The interrupt descriptor has a preset affinity mask at allocation
time, which is usually the default affinity mask.
The current code does not respect that mask and places the vector at some
random CPU, which gets corrected later by a set_affinity() call. That's
silly because the vector allocation can respect the mask upfront and place
the interrupt on a CPU which is in the mask. If that fails, then the
affinity is broken and a interrupt assigned on any online CPU.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Tested-by: Juergen Gross <jgross@suse.com >
Tested-by: Yu Chen <yu.c.chen@intel.com >
Acked-by: Juergen Gross <jgross@suse.com >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Alok Kataria <akataria@vmware.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Christoph Hellwig <hch@lst.de >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Paolo Bonzini <pbonzini@redhat.com >
Cc: Rui Zhang <rui.zhang@intel.com >
Cc: "K. Y. Srinivasan" <kys@microsoft.com >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: Len Brown <lenb@kernel.org >
Link: https://lkml.kernel.org/r/20170913213156.431670325@linutronix.de
2017-09-25 20:52:03 +02:00
Thomas Gleixner
2cffad7bad
x86/irq: Simplify hotplug vector accounting
...
Before a CPU is taken offline the number of active interrupt vectors on the
outgoing CPU and the number of vectors which are available on the other
online CPUs are counted and compared. If the active vectors are more than
the available vectors on the other CPUs then the CPU hot-unplug operation
is aborted. This again uses loop based search and is inaccurate.
The bitmap matrix allocator has accurate accounting information and can
tell exactly whether the vector space is sufficient or not.
Emit a message when the number of globaly reserved (unallocated) vectors is
larger than the number of available vectors after offlining a CPU because
after that point request_irq() might fail.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Tested-by: Juergen Gross <jgross@suse.com >
Tested-by: Yu Chen <yu.c.chen@intel.com >
Acked-by: Juergen Gross <jgross@suse.com >
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com >
Cc: Tony Luck <tony.luck@intel.com >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Alok Kataria <akataria@vmware.com >
Cc: Joerg Roedel <joro@8bytes.org >
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Christoph Hellwig <hch@lst.de >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Paolo Bonzini <pbonzini@redhat.com >
Cc: Rui Zhang <rui.zhang@intel.com >
Cc: "K. Y. Srinivasan" <kys@microsoft.com >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Dan Williams <dan.j.williams@intel.com >
Cc: Len Brown <lenb@kernel.org >
Link: https://lkml.kernel.org/r/20170913213156.351193962@linutronix.de
2017-09-25 20:52:02 +02:00