summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2020-06-08 07:11:47 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2020-06-08 08:00:57 -0400
commitfb7333dfd812062d3d51f377e70c1d3a3788472b (patch)
tree701379c48f81158a82ed9ece87a500f8ad4681c8 /virt
parent75ad6e800217220b8ee63904fb472fd5c3819259 (diff)
downloadlinux-fb7333dfd812062d3d51f377e70c1d3a3788472b.tar.gz
linux-fb7333dfd812062d3d51f377e70c1d3a3788472b.tar.bz2
linux-fb7333dfd812062d3d51f377e70c1d3a3788472b.zip
KVM: SVM: fix calls to is_intercept
is_intercept takes an INTERCEPT_* constant, not SVM_EXIT_*; because of this, the compiler was removing the body of the conditionals, as if is_intercept returned 0. This unveils a latent bug: when clearing the VINTR intercept, int_ctl must also be changed in the L1 VMCB (svm->nested.hsave), just like the intercept itself is also changed in the L1 VMCB. Otherwise V_IRQ remains set and, due to the VINTR intercept being clear, we get a spurious injection of a vector 0 interrupt on the next L2->L1 vmexit. Reported-by: Qian Cai <cai@lca.pw> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'virt')
0 files changed, 0 insertions, 0 deletions