Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fixes from Ingo Molnar: "Misc fixes: EFI, entry code, pkeys and MPX fixes, TASK_SIZE cleanups and a tsc frequency table fix" * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/mm: Switch from TASK_SIZE to TASK_SIZE_MAX in the page fault code x86/fsgsbase/64: Use TASK_SIZE_MAX for FSBASE/GSBASE upper limits x86/mm/mpx: Work around MPX erratum SKD046 x86/entry/64: Fix stack return address retrieval in thunk x86/efi: Fix 7-parameter efi_call()s x86/cpufeature, x86/mm/pkeys: Fix broken compile-time disabling of pkeys x86/tsc: Add missing Cherrytrail frequency to the table
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
#include <asm/mtrr.h>
|
||||
#include <linux/numa.h>
|
||||
#include <asm/asm.h>
|
||||
#include <asm/bugs.h>
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/mce.h>
|
||||
#include <asm/msr.h>
|
||||
@@ -270,6 +271,8 @@ static inline void squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
|
||||
static __init int setup_disable_smep(char *arg)
|
||||
{
|
||||
setup_clear_cpu_cap(X86_FEATURE_SMEP);
|
||||
/* Check for things that depend on SMEP being enabled: */
|
||||
check_mpx_erratum(&boot_cpu_data);
|
||||
return 1;
|
||||
}
|
||||
__setup("nosmep", setup_disable_smep);
|
||||
@@ -310,6 +313,10 @@ static bool pku_disabled;
|
||||
|
||||
static __always_inline void setup_pku(struct cpuinfo_x86 *c)
|
||||
{
|
||||
/* check the boot processor, plus compile options for PKU: */
|
||||
if (!cpu_feature_enabled(X86_FEATURE_PKU))
|
||||
return;
|
||||
/* checks the actual processor's cpuid bits: */
|
||||
if (!cpu_has(c, X86_FEATURE_PKU))
|
||||
return;
|
||||
if (pku_disabled)
|
||||
|
@@ -25,6 +25,41 @@
|
||||
#include <asm/apic.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Just in case our CPU detection goes bad, or you have a weird system,
|
||||
* allow a way to override the automatic disabling of MPX.
|
||||
*/
|
||||
static int forcempx;
|
||||
|
||||
static int __init forcempx_setup(char *__unused)
|
||||
{
|
||||
forcempx = 1;
|
||||
|
||||
return 1;
|
||||
}
|
||||
__setup("intel-skd-046-workaround=disable", forcempx_setup);
|
||||
|
||||
void check_mpx_erratum(struct cpuinfo_x86 *c)
|
||||
{
|
||||
if (forcempx)
|
||||
return;
|
||||
/*
|
||||
* Turn off the MPX feature on CPUs where SMEP is not
|
||||
* available or disabled.
|
||||
*
|
||||
* Works around Intel Erratum SKD046: "Branch Instructions
|
||||
* May Initialize MPX Bound Registers Incorrectly".
|
||||
*
|
||||
* This might falsely disable MPX on systems without
|
||||
* SMEP, like Atom processors without SMEP. But there
|
||||
* is no such hardware known at the moment.
|
||||
*/
|
||||
if (cpu_has(c, X86_FEATURE_MPX) && !cpu_has(c, X86_FEATURE_SMEP)) {
|
||||
setup_clear_cpu_cap(X86_FEATURE_MPX);
|
||||
pr_warn("x86/mpx: Disabling MPX since SMEP not present\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void early_init_intel(struct cpuinfo_x86 *c)
|
||||
{
|
||||
u64 misc_enable;
|
||||
@@ -173,6 +208,8 @@ static void early_init_intel(struct cpuinfo_x86 *c)
|
||||
if (edx & (1U << 28))
|
||||
c->x86_coreid_bits = get_count_order((ebx >> 16) & 0xff);
|
||||
}
|
||||
|
||||
check_mpx_erratum(c);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
|
مرجع در شماره جدید
Block a user