diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 0c6d36097..c8c018aed 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -2611,7 +2611,9 @@ cpu_ven_reset(void) void cpu_RDMSR(void) { - switch (cpu_s->cpu_type) { + if (CPL) + x86gpf(NULL, 0); + else switch (cpu_s->cpu_type) { case CPU_IBM386SLC: case CPU_IBM486SLC: case CPU_IBM486BL: @@ -3466,7 +3468,9 @@ cpu_WRMSR(void) cpu_log("WRMSR %08X %08X%08X\n", ECX, EDX, EAX); - switch (cpu_s->cpu_type) { + if (CPL) + x86gpf(NULL, 0); + else switch (cpu_s->cpu_type) { case CPU_IBM386SLC: case CPU_IBM486SLC: case CPU_IBM486BL: diff --git a/src/cpu/x86_ops_misc.h b/src/cpu/x86_ops_misc.h index 073327c9c..f3e4bb353 100644 --- a/src/cpu/x86_ops_misc.h +++ b/src/cpu/x86_ops_misc.h @@ -878,6 +878,10 @@ opINVD(uint32_t fetchdat) static int opWBINVD(uint32_t fetchdat) { + if (CPL) { + x86gpf(NULL, 0); + return 1; + } CLOCK_CYCLES(10000); CPU_BLOCK_END(); return 0;