mirror of https://github.com/xemu-project/xemu.git
target/ppc: Prevent supervisor from modifying MSR[ME]
Prevent guest state modifying the MSR[ME] bit. Per ISA: An attempt to modify MSR[ME] in privileged but non-hypervisor state is ignored (i.e., the bit is not changed). Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
99ea316e2a
commit
678b6f1af7
|
@ -264,6 +264,11 @@ int hreg_store_msr(CPUPPCState *env, target_ulong value, int alter_hv)
|
||||||
value &= ~MSR_HVB;
|
value &= ~MSR_HVB;
|
||||||
value |= env->msr & MSR_HVB;
|
value |= env->msr & MSR_HVB;
|
||||||
}
|
}
|
||||||
|
/* Attempt to modify MSR[ME] in guest state is ignored */
|
||||||
|
if (is_book3s_arch2x(env) && !(env->msr & MSR_HVB)) {
|
||||||
|
value &= ~(1 << MSR_ME);
|
||||||
|
value |= env->msr & (1 << MSR_ME);
|
||||||
|
}
|
||||||
if ((value ^ env->msr) & (R_MSR_IR_MASK | R_MSR_DR_MASK)) {
|
if ((value ^ env->msr) & (R_MSR_IR_MASK | R_MSR_DR_MASK)) {
|
||||||
cpu_interrupt_exittb(cs);
|
cpu_interrupt_exittb(cs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue