diff --git a/patches.suse/KVM-x86-emulator-update-the-emulation-mode-after-CR0.patch b/patches.suse/KVM-x86-emulator-update-the-emulation-mode-after-CR0.patch new file mode 100644 index 0000000..151a14d --- /dev/null +++ b/patches.suse/KVM-x86-emulator-update-the-emulation-mode-after-CR0.patch @@ -0,0 +1,58 @@ +Patch-mainline: v6.1-rc4 +Git-commit: ad8f9e69942c7db90758d9d774157e53bce94840 +References: git-fixes +From: Maxim Levitsky +Date: Tue, 25 Oct 2022 15:47:31 +0300 +Subject: [PATCH] KVM: x86: emulator: update the emulation mode after CR0 write + +Update the emulation mode when handling writes to CR0, because +toggling CR0.PE switches between Real and Protected Mode, and toggling +CR0.PG when EFER.LME=1 switches between Long and Protected Mode. + +This is likely a benign bug because there is no writeback of state, +other than the RIP increment, and when toggling CR0.PE, the CPU has +to execute code from a very low memory address. + +Signed-off-by: Maxim Levitsky +Message-Id: <20221025124741.228045-14-mlevitsk@redhat.com> +Cc: stable@vger.kernel.org +Signed-off-by: Paolo Bonzini +Signed-off-by: Juergen Gross +--- + arch/x86/kvm/emulate.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c +index 33385ebae100..2954c046740b 100644 +--- a/arch/x86/kvm/emulate.c ++++ b/arch/x86/kvm/emulate.c +@@ -3641,11 +3641,25 @@ static int em_movbe(struct x86_emulate_ctxt *ctxt) + + static int em_cr_write(struct x86_emulate_ctxt *ctxt) + { +- if (ctxt->ops->set_cr(ctxt, ctxt->modrm_reg, ctxt->src.val)) ++ int cr_num = ctxt->modrm_reg; ++ int r; ++ ++ if (ctxt->ops->set_cr(ctxt, cr_num, ctxt->src.val)) + return emulate_gp(ctxt, 0); + + /* Disable writeback. */ + ctxt->dst.type = OP_NONE; ++ ++ if (cr_num == 0) { ++ /* ++ * CR0 write might have updated CR0.PE and/or CR0.PG ++ * which can affect the cpu's execution mode. ++ */ ++ r = emulator_recalc_and_set_mode(ctxt); ++ if (r != X86EMUL_CONTINUE) ++ return r; ++ } ++ + return X86EMUL_CONTINUE; + } + +-- +2.35.3 + diff --git a/series.conf b/series.conf index f91f756..e74050d 100644 --- a/series.conf +++ b/series.conf @@ -63147,6 +63147,7 @@ patches.suse/usb-dwc3-gadget-Don-t-set-IMI-for-no_interrupt.patch patches.suse/KVM-x86-emulator-em_sysexit-should-update-ctxt-mode.patch patches.suse/KVM-x86-emulator-introduce-emulator_recalc_and_set_m.patch + patches.suse/KVM-x86-emulator-update-the-emulation-mode-after-CR0.patch patches.suse/NFSv4.1-Handle-RECLAIM_COMPLETE-trunking-errors.patch patches.suse/NFSv4.1-We-must-always-send-RECLAIM_COMPLETE-after-a.patch patches.suse/NFSv4.2-Fixup-CLONE-dest-file-size-for-zero-length-c.patch