Commit 10e23462 authored by Andy Whitcroft's avatar Andy Whitcroft Committed by Kleber Sacilotto de Souza

Revert "x86/idle: Disable IBRS entering idle and enable it on wakeup"

CVE-2017-5753 (revert embargoed)
CVE-2017-5715 (revert embargoed)

This reverts commit e231ae74.
Signed-off-by: default avatarAndy Whitcroft <apw@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent 2870f7d2
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <asm/cpufeature.h> #include <asm/cpufeature.h>
#include <asm/spec_ctrl.h>
#include <asm/microcode.h>
#define MWAIT_SUBSTATE_MASK 0xf #define MWAIT_SUBSTATE_MASK 0xf
#define MWAIT_CSTATE_MASK 0xf #define MWAIT_CSTATE_MASK 0xf
...@@ -106,15 +104,9 @@ static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx) ...@@ -106,15 +104,9 @@ static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
mb(); mb();
} }
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL))
native_wrmsrl(MSR_IA32_SPEC_CTRL, 0);
__monitor((void *)&current_thread_info()->flags, 0, 0); __monitor((void *)&current_thread_info()->flags, 0, 0);
if (!need_resched()) if (!need_resched())
__mwait(eax, ecx); __mwait(eax, ecx);
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL))
native_wrmsrl(MSR_IA32_SPEC_CTRL, FEATURE_ENABLE_IBRS);
} }
current_clr_polling(); current_clr_polling();
} }
......
...@@ -424,19 +424,11 @@ static void mwait_idle(void) ...@@ -424,19 +424,11 @@ static void mwait_idle(void)
smp_mb(); /* quirk */ smp_mb(); /* quirk */
} }
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL))
native_wrmsrl(MSR_IA32_SPEC_CTRL, 0);
__monitor((void *)&current_thread_info()->flags, 0, 0); __monitor((void *)&current_thread_info()->flags, 0, 0);
if (!need_resched()) { if (!need_resched())
__sti_mwait(0, 0); __sti_mwait(0, 0);
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL)) else
native_wrmsrl(MSR_IA32_SPEC_CTRL, FEATURE_ENABLE_IBRS);
} else {
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL))
native_wrmsrl(MSR_IA32_SPEC_CTRL, FEATURE_ENABLE_IBRS);
local_irq_enable(); local_irq_enable();
}
trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
} else { } else {
local_irq_enable(); local_irq_enable();
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
# include <asm/smp.h> # include <asm/smp.h>
#endif #endif
#define IBRS_DISABLE_THRESHOLD 1000
/* simple loop based delay: */ /* simple loop based delay: */
static void delay_loop(unsigned long loops) static void delay_loop(unsigned long loops)
{ {
...@@ -100,10 +98,6 @@ static void delay_mwaitx(unsigned long __loops) ...@@ -100,10 +98,6 @@ static void delay_mwaitx(unsigned long __loops)
for (;;) { for (;;) {
delay = min_t(u64, MWAITX_MAX_LOOPS, loops); delay = min_t(u64, MWAITX_MAX_LOOPS, loops);
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL) &&
(delay > IBRS_DISABLE_THRESHOLD))
native_wrmsrl(MSR_IA32_SPEC_CTRL, 0);
/* /*
* Use cpu_tss as a cacheline-aligned, seldomly * Use cpu_tss as a cacheline-aligned, seldomly
* accessed per-cpu variable as the monitor target. * accessed per-cpu variable as the monitor target.
...@@ -117,10 +111,6 @@ static void delay_mwaitx(unsigned long __loops) ...@@ -117,10 +111,6 @@ static void delay_mwaitx(unsigned long __loops)
*/ */
__mwaitx(MWAITX_DISABLE_CSTATES, delay, MWAITX_ECX_TIMER_ENABLE); __mwaitx(MWAITX_DISABLE_CSTATES, delay, MWAITX_ECX_TIMER_ENABLE);
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL) &&
(delay > IBRS_DISABLE_THRESHOLD))
native_wrmsrl(MSR_IA32_SPEC_CTRL, FEATURE_ENABLE_IBRS);
end = rdtsc_ordered(); end = rdtsc_ordered();
if (loops <= end - start) if (loops <= end - start)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment