mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 22:54:01 +00:00
x86/fault: Skip the AMD erratum #91 workaround on unaffected CPUs
According to the Revision Guide for AMD Athlon™ 64 and AMD Opteron™ Processors, only early revisions of family 0xF are affected. This will avoid unnecessarily fetching instruction bytes before sending SIGSEGV to user programs. Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lkml.kernel.org/r/477173b7784bc28afb3e53d76ae5ef143917e8dd.1612924255.git.luto@kernel.org
This commit is contained in:
parent
35f1c89b0c
commit
d24df8ecf9
1 changed files with 13 additions and 0 deletions
|
@ -106,6 +106,15 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr,
|
|||
}
|
||||
}
|
||||
|
||||
static bool is_amd_k8_pre_npt(void)
|
||||
{
|
||||
struct cpuinfo_x86 *c = &boot_cpu_data;
|
||||
|
||||
return unlikely(IS_ENABLED(CONFIG_CPU_SUP_AMD) &&
|
||||
c->x86_vendor == X86_VENDOR_AMD &&
|
||||
c->x86 == 0xf && c->x86_model < 0x40);
|
||||
}
|
||||
|
||||
static int
|
||||
is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr)
|
||||
{
|
||||
|
@ -113,6 +122,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr)
|
|||
unsigned char *instr;
|
||||
int prefetch = 0;
|
||||
|
||||
/* Erratum #91 affects AMD K8, pre-NPT CPUs */
|
||||
if (!is_amd_k8_pre_npt())
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* If it was a exec (instruction fetch) fault on NX page, then
|
||||
* do not ignore the fault:
|
||||
|
|
Loading…
Reference in a new issue