From: Greg Kroah-Hartman Date: Sat, 23 May 2020 07:48:43 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.4.225~56 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ea3480f66d8db421b8162e9a32af7c23a167c11c;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: kvm-x86-fix-pkru-save-restore-when-guest-cr4.pke-0-move-it-to-x86.c.patch --- diff --git a/queue-5.4/alsa-hda-realtek-enable-headset-mic-of-asus-ux581lv-.patch b/queue-5.4/alsa-hda-realtek-enable-headset-mic-of-asus-ux581lv-.patch index 34536415706..3318a263006 100644 --- a/queue-5.4/alsa-hda-realtek-enable-headset-mic-of-asus-ux581lv-.patch +++ b/queue-5.4/alsa-hda-realtek-enable-headset-mic-of-asus-ux581lv-.patch @@ -16,14 +16,12 @@ Link: https://lore.kernel.org/r/20200512061525.133985-3-jian-hong@endlessm.com Signed-off-by: Takashi Iwai Signed-off-by: Sasha Levin --- - sound/pci/hda/patch_realtek.c | 1 + + sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+) -diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c -index 1efaeb09ec3f..afc20f73b42d 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c -@@ -7436,6 +7436,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { +@@ -7436,6 +7436,7 @@ static const struct snd_pci_quirk alc269 SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC), SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC), SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE), @@ -31,6 +29,3 @@ index 1efaeb09ec3f..afc20f73b42d 100644 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), SND_PCI_QUIRK(0x1043, 0x1a30, "ASUS X705UD", ALC256_FIXUP_ASUS_MIC), SND_PCI_QUIRK(0x1043, 0x1b11, "ASUS UX431DA", ALC294_FIXUP_ASUS_COEF_1B), --- -2.25.1 - diff --git a/queue-5.4/kvm-x86-fix-pkru-save-restore-when-guest-cr4.pke-0-move-it-to-x86.c.patch b/queue-5.4/kvm-x86-fix-pkru-save-restore-when-guest-cr4.pke-0-move-it-to-x86.c.patch new file mode 100644 index 00000000000..9698d4c7554 --- /dev/null +++ b/queue-5.4/kvm-x86-fix-pkru-save-restore-when-guest-cr4.pke-0-move-it-to-x86.c.patch @@ -0,0 +1,122 @@ +From 37486135d3a7b03acc7755b63627a130437f066a Mon Sep 17 00:00:00 2001 +From: Babu Moger +Date: Tue, 12 May 2020 18:59:06 -0500 +Subject: KVM: x86: Fix pkru save/restore when guest CR4.PKE=0, move it to x86.c + +From: Babu Moger + +commit 37486135d3a7b03acc7755b63627a130437f066a upstream. + +Though rdpkru and wrpkru are contingent upon CR4.PKE, the PKRU +resource isn't. It can be read with XSAVE and written with XRSTOR. +So, if we don't set the guest PKRU value here(kvm_load_guest_xsave_state), +the guest can read the host value. + +In case of kvm_load_host_xsave_state, guest with CR4.PKE clear could +potentially use XRSTOR to change the host PKRU value. + +While at it, move pkru state save/restore to common code and the +host_pkru field to kvm_vcpu_arch. This will let SVM support protection keys. + +Cc: stable@vger.kernel.org +Reported-by: Jim Mattson +Signed-off-by: Babu Moger +Message-Id: <158932794619.44260.14508381096663848853.stgit@naples-babu.amd.com> +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/include/asm/kvm_host.h | 1 + + arch/x86/kvm/vmx/vmx.c | 18 ------------------ + arch/x86/kvm/x86.c | 17 +++++++++++++++++ + 3 files changed, 18 insertions(+), 18 deletions(-) + +--- a/arch/x86/include/asm/kvm_host.h ++++ b/arch/x86/include/asm/kvm_host.h +@@ -550,6 +550,7 @@ struct kvm_vcpu_arch { + unsigned long cr4; + unsigned long cr4_guest_owned_bits; + unsigned long cr8; ++ u32 host_pkru; + u32 pkru; + u32 hflags; + u64 efer; +--- a/arch/x86/kvm/vmx/vmx.c ++++ b/arch/x86/kvm/vmx/vmx.c +@@ -1360,7 +1360,6 @@ void vmx_vcpu_load(struct kvm_vcpu *vcpu + + vmx_vcpu_pi_load(vcpu, cpu); + +- vmx->host_pkru = read_pkru(); + vmx->host_debugctlmsr = get_debugctlmsr(); + } + +@@ -6521,11 +6520,6 @@ static void vmx_vcpu_run(struct kvm_vcpu + + kvm_load_guest_xcr0(vcpu); + +- if (static_cpu_has(X86_FEATURE_PKU) && +- kvm_read_cr4_bits(vcpu, X86_CR4_PKE) && +- vcpu->arch.pkru != vmx->host_pkru) +- __write_pkru(vcpu->arch.pkru); +- + pt_guest_enter(vmx); + + atomic_switch_perf_msrs(vmx); +@@ -6614,18 +6608,6 @@ static void vmx_vcpu_run(struct kvm_vcpu + + pt_guest_exit(vmx); + +- /* +- * eager fpu is enabled if PKEY is supported and CR4 is switched +- * back on host, so it is safe to read guest PKRU from current +- * XSAVE. +- */ +- if (static_cpu_has(X86_FEATURE_PKU) && +- kvm_read_cr4_bits(vcpu, X86_CR4_PKE)) { +- vcpu->arch.pkru = rdpkru(); +- if (vcpu->arch.pkru != vmx->host_pkru) +- __write_pkru(vmx->host_pkru); +- } +- + kvm_put_guest_xcr0(vcpu); + + vmx->nested.nested_run_pending = 0; +--- a/arch/x86/kvm/x86.c ++++ b/arch/x86/kvm/x86.c +@@ -832,11 +832,25 @@ void kvm_load_guest_xcr0(struct kvm_vcpu + xsetbv(XCR_XFEATURE_ENABLED_MASK, vcpu->arch.xcr0); + vcpu->guest_xcr0_loaded = 1; + } ++ ++ if (static_cpu_has(X86_FEATURE_PKU) && ++ (kvm_read_cr4_bits(vcpu, X86_CR4_PKE) || ++ (vcpu->arch.xcr0 & XFEATURE_MASK_PKRU)) && ++ vcpu->arch.pkru != vcpu->arch.host_pkru) ++ __write_pkru(vcpu->arch.pkru); + } + EXPORT_SYMBOL_GPL(kvm_load_guest_xcr0); + + void kvm_put_guest_xcr0(struct kvm_vcpu *vcpu) + { ++ if (static_cpu_has(X86_FEATURE_PKU) && ++ (kvm_read_cr4_bits(vcpu, X86_CR4_PKE) || ++ (vcpu->arch.xcr0 & XFEATURE_MASK_PKRU))) { ++ vcpu->arch.pkru = rdpkru(); ++ if (vcpu->arch.pkru != vcpu->arch.host_pkru) ++ __write_pkru(vcpu->arch.host_pkru); ++ } ++ + if (vcpu->guest_xcr0_loaded) { + if (vcpu->arch.xcr0 != host_xcr0) + xsetbv(XCR_XFEATURE_ENABLED_MASK, host_xcr0); +@@ -8222,6 +8236,9 @@ static int vcpu_enter_guest(struct kvm_v + trace_kvm_entry(vcpu->vcpu_id); + guest_enter_irqoff(); + ++ /* Save host pkru register if supported */ ++ vcpu->arch.host_pkru = read_pkru(); ++ + fpregs_assert_state_consistent(); + if (test_thread_flag(TIF_NEED_FPU_LOAD)) + switch_fpu_return(); diff --git a/queue-5.4/series b/queue-5.4/series index 28aaa22bac3..cdf0c64fa96 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -55,3 +55,4 @@ alsa-hda-realtek-add-quirk-for-samsung-notebook.patch alsa-hda-realtek-enable-headset-mic-of-asus-gl503vm-.patch alsa-hda-realtek-enable-headset-mic-of-asus-ux550ge-.patch alsa-hda-realtek-enable-headset-mic-of-asus-ux581lv-.patch +kvm-x86-fix-pkru-save-restore-when-guest-cr4.pke-0-move-it-to-x86.c.patch