Commit cd840e42 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Thomas Gleixner

x86/entry, mce: Disallow #DB during #MC

#MC is fragile as heck, don't tempt fate.
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200529213321.131187767@infradead.org

parent fd338e35
...@@ -1943,22 +1943,34 @@ static __always_inline void exc_machine_check_user(struct pt_regs *regs) ...@@ -1943,22 +1943,34 @@ static __always_inline void exc_machine_check_user(struct pt_regs *regs)
/* MCE hit kernel mode */ /* MCE hit kernel mode */
DEFINE_IDTENTRY_MCE(exc_machine_check) DEFINE_IDTENTRY_MCE(exc_machine_check)
{ {
unsigned long dr7;
dr7 = local_db_save();
exc_machine_check_kernel(regs); exc_machine_check_kernel(regs);
local_db_restore(dr7);
} }
/* The user mode variant. */ /* The user mode variant. */
DEFINE_IDTENTRY_MCE_USER(exc_machine_check) DEFINE_IDTENTRY_MCE_USER(exc_machine_check)
{ {
unsigned long dr7;
dr7 = local_db_save();
exc_machine_check_user(regs); exc_machine_check_user(regs);
local_db_restore(dr7);
} }
#else #else
/* 32bit unified entry point */ /* 32bit unified entry point */
DEFINE_IDTENTRY_MCE(exc_machine_check) DEFINE_IDTENTRY_MCE(exc_machine_check)
{ {
unsigned long dr7;
dr7 = local_db_save();
if (user_mode(regs)) if (user_mode(regs))
exc_machine_check_user(regs); exc_machine_check_user(regs);
else else
exc_machine_check_kernel(regs); exc_machine_check_kernel(regs);
local_db_restore(dr7);
} }
#endif #endif
......
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