lguest: fix crash 'unhandled trap 13 at <native_read_msr_safe>'
Impact: fix lguest boot crash on modern Intel machines The code in early_init_intel does: if (c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xd)) { u64 misc_enable; rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); And that rdmsr faults (not allowed from non-0 PL). We can get around this by mugging the family ID part of the cpuid. 5 seems like a good number. Of course, this is a hack (how very lguest!). We could just indicate that we don't support MSRs, or implement lguest_rdmst. Reported-by: Patrick McHardy <kaber@trash.net> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Tested-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
parent
7a203f3b08
commit
cbd88c8e6f
1 changed files with 5 additions and 0 deletions
|
@ -343,6 +343,11 @@ static void lguest_cpuid(unsigned int *ax, unsigned int *bx,
|
|||
* flush_tlb_user() for both user and kernel mappings unless
|
||||
* the Page Global Enable (PGE) feature bit is set. */
|
||||
*dx |= 0x00002000;
|
||||
/* We also lie, and say we're family id 5. 6 or greater
|
||||
* leads to a rdmsr in early_init_intel which we can't handle.
|
||||
* Family ID is returned as bits 8-12 in ax. */
|
||||
*ax &= 0xFFFFF0FF;
|
||||
*ax |= 0x00000500;
|
||||
break;
|
||||
case 0x80000000:
|
||||
/* Futureproof this a little: if they ask how much extended
|
||||
|
|
Loading…
Reference in a new issue