mirror of https://gitee.com/openkylin/linux.git
x86/fault: Don't try to recover from an implicit supervisor access
This avoids a situation in which we attempt to apply various fixups that are not intended to handle implicit supervisor accesses from user mode if we screw up in a way that causes this type of fault. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@surriel.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Yu-cheng Yu <yu-cheng.yu@intel.com> Link: http://lkml.kernel.org/r/9999f151d72ff352265f3274c5ab3a4105090f49.1542841400.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
0ed32f1aa6
commit
ebb53e2597
|
@ -653,6 +653,15 @@ no_context(struct pt_regs *regs, unsigned long error_code,
|
|||
unsigned long flags;
|
||||
int sig;
|
||||
|
||||
if (user_mode(regs)) {
|
||||
/*
|
||||
* This is an implicit supervisor-mode access from user
|
||||
* mode. Bypass all the kernel-mode recovery code and just
|
||||
* OOPS.
|
||||
*/
|
||||
goto oops;
|
||||
}
|
||||
|
||||
/* Are we prepared to handle this kernel fault? */
|
||||
if (fixup_exception(regs, X86_TRAP_PF, error_code, address)) {
|
||||
/*
|
||||
|
@ -738,6 +747,7 @@ no_context(struct pt_regs *regs, unsigned long error_code,
|
|||
if (IS_ENABLED(CONFIG_EFI))
|
||||
efi_recover_from_page_fault(address);
|
||||
|
||||
oops:
|
||||
/*
|
||||
* Oops. The kernel tried to access some bad page. We'll have to
|
||||
* terminate things with extreme prejudice:
|
||||
|
|
Loading…
Reference in New Issue