On 20/11/18 19:20, Jim Mattson wrote: > On Tue, Nov 20, 2018 at 8:03 AM, Liran Alon <liran.alon@xxxxxxxxxx> wrote: >> When guest transitions from/to long-mode by modifying MSR_EFER.LMA, >> the list of shared MSRs to be saved/restored on guest<->host >> transitions is updated (See vmx_set_efer() call to setup_msrs()). >> >> On every entry to guest, vcpu_enter_guest() calls >> vmx_prepare_switch_to_guest(). This function should also take care >> of setting the shared MSRs to be saved/restored. However, the >> function does nothing in case we are already running with loaded >> guest state (vmx->loaded_cpu_state != NULL). >> >> This means that even when guest modifies MSR_EFER.LMA which results >> in updating the list of shared MSRs, it isn't being taken into account >> by vmx_prepare_switch_to_guest() because it happens while we are >> running with loaded guest state. >> >> To fix above mentioned issue, add a flag to mark that the list of >> shared MSRs has been updated and modify vmx_prepare_switch_to_guest() >> to set shared MSRs when running with host state *OR* list of shared >> MSRs has been updated. >> >> Note that this issue was mistakenly introduced by commit >> 678e315e78a7 ("KVM: vmx: add dedicated utility to access guest's >> kernel_gs_base") because previously vmx_set_efer() always called >> vmx_load_host_state() which resulted in vmx_prepare_switch_to_guest() to >> set shared MSRs. >> >> Fixes: 678e315e78a7 ("KVM: vmx: add dedicated utility to access guest's kernel_gs_base") >> >> Reported-by: Eyal Moscovici <eyal.moscovici@xxxxxxxxxx> >> Reviewed-by: Mihai Carabas <mihai.carabas@xxxxxxxxxx> >> Reviewed-by: Liam Merwick <liam.merwick@xxxxxxxxxx> >> Signed-off-by: Liran Alon <liran.alon@xxxxxxxxxx> > Reviewed-by: Jim Mattson <jmattson@xxxxxxxxxx> > Queued, thanks. Paolo