MCE: Fix vm86 handling for 32bit mce handler
When running on 32bit the mce handler could misinterpret vm86 mode as ring 0. This can affect whether it does recovery or not; it was possible to panic when recovery was actually possible. Fix this by always forcing vm86 to look like ring 3. Signed-off-by: Andi Kleen <ak@linux.intel.com> Cc: <stable@vger.kernel.org> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
8571723a69
commit
a129a7c845
@ -437,6 +437,14 @@ static inline void mce_gather_info(struct mce *m, struct pt_regs *regs)
|
||||
if (m->mcgstatus & (MCG_STATUS_RIPV|MCG_STATUS_EIPV)) {
|
||||
m->ip = regs->ip;
|
||||
m->cs = regs->cs;
|
||||
|
||||
/*
|
||||
* When in VM86 mode make the cs look like ring 3
|
||||
* always. This is a lie, but it's better than passing
|
||||
* the additional vm86 bit around everywhere.
|
||||
*/
|
||||
if (v8086_mode(regs))
|
||||
m->cs |= 3;
|
||||
}
|
||||
/* Use accurate RIP reporting if available. */
|
||||
if (rip_msr)
|
||||
|
Loading…
Reference in New Issue
Block a user