rebase patches on top of Ubuntu-5.4.0-85.95
(generated with debian/scripts/import-upstream-tag) Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
8c7431e839
commit
9276de2e36
@ -21,7 +21,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
|
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
|
||||||
index d1d757c6edf4..7b57571cf574 100755
|
index 06c1e9e3bc38..6e7012175600 100755
|
||||||
--- a/scripts/mkcompile_h
|
--- a/scripts/mkcompile_h
|
||||||
+++ b/scripts/mkcompile_h
|
+++ b/scripts/mkcompile_h
|
||||||
@@ -34,10 +34,14 @@ else
|
@@ -34,10 +34,14 @@ else
|
||||||
|
@ -55,10 +55,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
2 files changed, 111 insertions(+)
|
2 files changed, 111 insertions(+)
|
||||||
|
|
||||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
index 359b54d2da21..00c9ace3711b 100644
|
index 623eed9d3009..cc43987a3238 100644
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -3441,6 +3441,15 @@
|
@@ -3447,6 +3447,15 @@
|
||||||
Also, it enforces the PCI Local Bus spec
|
Also, it enforces the PCI Local Bus spec
|
||||||
rule that those bits should be 0 in system reset
|
rule that those bits should be 0 in system reset
|
||||||
events (useful for kexec/kdump cases).
|
events (useful for kexec/kdump cases).
|
||||||
@ -75,10 +75,10 @@ index 359b54d2da21..00c9ace3711b 100644
|
|||||||
Safety option to keep boot IRQs enabled. This
|
Safety option to keep boot IRQs enabled. This
|
||||||
should never be necessary.
|
should never be necessary.
|
||||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||||
index c17540b5c979..8f0d62e2a9cf 100644
|
index e0fe975bedd5..9434da9dba02 100644
|
||||||
--- a/drivers/pci/quirks.c
|
--- a/drivers/pci/quirks.c
|
||||||
+++ b/drivers/pci/quirks.c
|
+++ b/drivers/pci/quirks.c
|
||||||
@@ -192,6 +192,106 @@ static int __init pci_apply_final_quirks(void)
|
@@ -193,6 +193,106 @@ static int __init pci_apply_final_quirks(void)
|
||||||
}
|
}
|
||||||
fs_initcall_sync(pci_apply_final_quirks);
|
fs_initcall_sync(pci_apply_final_quirks);
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ index c17540b5c979..8f0d62e2a9cf 100644
|
|||||||
/*
|
/*
|
||||||
* Decoding should be disabled for a PCI device during BAR sizing to avoid
|
* Decoding should be disabled for a PCI device during BAR sizing to avoid
|
||||||
* conflict. But doing so may cause problems on host bridge and perhaps other
|
* conflict. But doing so may cause problems on host bridge and perhaps other
|
||||||
@@ -4915,6 +5015,8 @@ static const struct pci_dev_acs_enabled {
|
@@ -4926,6 +5026,8 @@ static const struct pci_dev_acs_enabled {
|
||||||
{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
|
{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
|
||||||
/* APM X-Gene */
|
/* APM X-Gene */
|
||||||
{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
|
{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
||||||
index 26cb1630b86d..85bedd6ebbac 100644
|
index cf55dc7bcd03..6c10d2052a75 100644
|
||||||
--- a/virt/kvm/kvm_main.c
|
--- a/virt/kvm/kvm_main.c
|
||||||
+++ b/virt/kvm/kvm_main.c
|
+++ b/virt/kvm/kvm_main.c
|
||||||
@@ -76,7 +76,7 @@ module_param(halt_poll_ns, uint, 0644);
|
@@ -76,7 +76,7 @@ module_param(halt_poll_ns, uint, 0644);
|
||||||
|
@ -10,10 +10,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||||
index e393a51b3973..8bbc10603f1f 100644
|
index 8069ef56ee0b..6988b538f873 100644
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -9349,7 +9349,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
|
@@ -9356,7 +9356,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
|
||||||
refcnt = netdev_refcnt_read(dev);
|
refcnt = netdev_refcnt_read(dev);
|
||||||
|
|
||||||
if (refcnt && time_after(jiffies, warning_time + 10 * HZ)) {
|
if (refcnt && time_after(jiffies, warning_time + 10 * HZ)) {
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
|
||||||
Date: Thu, 29 Jul 2021 18:37:38 +0300
|
|
||||||
Subject: [PATCH] UBUNTU: SAUCE: KVM: nSVM: always intercept VMLOAD/VMSAVE when
|
|
||||||
nested
|
|
||||||
|
|
||||||
If L1 disables VMLOAD/VMSAVE intercepts, and doesn't enable
|
|
||||||
Virtual VMLOAD/VMSAVE (currently not supported for the nested hypervisor),
|
|
||||||
then VMLOAD/VMSAVE must operate on the L1 physical memory, which is only
|
|
||||||
possible by making L0 intercept these instructions.
|
|
||||||
|
|
||||||
Failure to do so allowed the nested guest to run VMLOAD/VMSAVE unintercepted,
|
|
||||||
and thus read/write portions of the host physical memory.
|
|
||||||
|
|
||||||
This fixes CVE-2021-3656, which was discovered by Maxim Levitsky and
|
|
||||||
Paolo Bonzini.
|
|
||||||
|
|
||||||
Fixes: 89c8a4984fc9 ("KVM: SVM: Enable Virtual VMLOAD VMSAVE feature")
|
|
||||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
|
||||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
||||||
CVE-2021-3656
|
|
||||||
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
|
|
||||||
Acked-by: Stefan Bader <stefan.bader@canonical.com>
|
|
||||||
Acked-by: Ben Romer <benjamin.romer@canonical.com>
|
|
||||||
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
|
|
||||||
(cherry picked from commit 001ba8ebae0d2489b3e671b231daed4ad6f558d2)
|
|
||||||
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
|
|
||||||
---
|
|
||||||
arch/x86/kvm/svm.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
|
|
||||||
index be8a017be58b..3b1b57521d8b 100644
|
|
||||||
--- a/arch/x86/kvm/svm.c
|
|
||||||
+++ b/arch/x86/kvm/svm.c
|
|
||||||
@@ -516,6 +516,9 @@ static void recalc_intercepts(struct vcpu_svm *svm)
|
|
||||||
c->intercept_dr = h->intercept_dr | g->intercept_dr;
|
|
||||||
c->intercept_exceptions = h->intercept_exceptions | g->intercept_exceptions;
|
|
||||||
c->intercept = h->intercept | g->intercept;
|
|
||||||
+
|
|
||||||
+ c->intercept |= (1ULL << INTERCEPT_VMLOAD);
|
|
||||||
+ c->intercept |= (1ULL << INTERCEPT_VMSAVE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct vmcb *get_host_vmcb(struct vcpu_svm *svm)
|
|
@ -1,82 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Maxim Levitsky <mlevitsk@redhat.com>
|
|
||||||
Date: Mon, 16 Aug 2021 22:06:00 +0200
|
|
||||||
Subject: [PATCH] KVM: nSVM: avoid picking up unsupported bits from L2 in
|
|
||||||
int_ctl (CVE-2021-3653)
|
|
||||||
|
|
||||||
BugLink: https://bugs.launchpad.net/bugs/1940134
|
|
||||||
|
|
||||||
commit 0f923e07124df069ba68d8bb12324398f4b6b709 upstream.
|
|
||||||
|
|
||||||
* Invert the mask of bits that we pick from L2 in
|
|
||||||
nested_vmcb02_prepare_control
|
|
||||||
|
|
||||||
* Invert and explicitly use VIRQ related bits bitmask in svm_clear_vintr
|
|
||||||
|
|
||||||
This fixes a security issue that allowed a malicious L1 to run L2 with
|
|
||||||
AVIC enabled, which allowed the L2 to exploit the uninitialized and enabled
|
|
||||||
AVIC to read/write the host physical memory at some offsets.
|
|
||||||
|
|
||||||
Fixes: 3d6368ef580a ("KVM: SVM: Add VMRUN handler")
|
|
||||||
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
|
|
||||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
(cherry picked from commit 4d9059df57cb3b8ff07cea55ba439fa3c846ef80 linux-5.4.y)
|
|
||||||
CVE-2021-3653
|
|
||||||
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
|
|
||||||
Acked-by: Kamal Mostafa <kamal@canonical.com>
|
|
||||||
Acked-by: Ian May <ian.may@canonical.com>
|
|
||||||
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
|
|
||||||
(cherry picked from commit 47aa9272b0ff29c845179e60ecf8cb7a8375b346)
|
|
||||||
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
|
|
||||||
---
|
|
||||||
arch/x86/include/asm/svm.h | 2 ++
|
|
||||||
arch/x86/kvm/svm.c | 15 ++++++++-------
|
|
||||||
2 files changed, 10 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h
|
|
||||||
index 6ece8561ba66..c29d8fb0ffbe 100644
|
|
||||||
--- a/arch/x86/include/asm/svm.h
|
|
||||||
+++ b/arch/x86/include/asm/svm.h
|
|
||||||
@@ -119,6 +119,8 @@ struct __attribute__ ((__packed__)) vmcb_control_area {
|
|
||||||
#define V_IGN_TPR_SHIFT 20
|
|
||||||
#define V_IGN_TPR_MASK (1 << V_IGN_TPR_SHIFT)
|
|
||||||
|
|
||||||
+#define V_IRQ_INJECTION_BITS_MASK (V_IRQ_MASK | V_INTR_PRIO_MASK | V_IGN_TPR_MASK)
|
|
||||||
+
|
|
||||||
#define V_INTR_MASKING_SHIFT 24
|
|
||||||
#define V_INTR_MASKING_MASK (1 << V_INTR_MASKING_SHIFT)
|
|
||||||
|
|
||||||
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
|
|
||||||
index 3b1b57521d8b..4f2e4bc4b33b 100644
|
|
||||||
--- a/arch/x86/kvm/svm.c
|
|
||||||
+++ b/arch/x86/kvm/svm.c
|
|
||||||
@@ -1446,12 +1446,7 @@ static __init int svm_hardware_setup(void)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (vgif) {
|
|
||||||
- if (!boot_cpu_has(X86_FEATURE_VGIF))
|
|
||||||
- vgif = false;
|
|
||||||
- else
|
|
||||||
- pr_info("Virtual GIF supported\n");
|
|
||||||
- }
|
|
||||||
+ vgif = false; /* Disabled for CVE-2021-3653 */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
@@ -3601,7 +3596,13 @@ static void enter_svm_guest_mode(struct vcpu_svm *svm, u64 vmcb_gpa,
|
|
||||||
svm->nested.intercept = nested_vmcb->control.intercept;
|
|
||||||
|
|
||||||
svm_flush_tlb(&svm->vcpu, true);
|
|
||||||
- svm->vmcb->control.int_ctl = nested_vmcb->control.int_ctl | V_INTR_MASKING_MASK;
|
|
||||||
+
|
|
||||||
+ svm->vmcb->control.int_ctl &=
|
|
||||||
+ V_INTR_MASKING_MASK | V_GIF_ENABLE_MASK | V_GIF_MASK;
|
|
||||||
+
|
|
||||||
+ svm->vmcb->control.int_ctl |= nested_vmcb->control.int_ctl &
|
|
||||||
+ (V_TPR_MASK | V_IRQ_INJECTION_BITS_MASK);
|
|
||||||
+
|
|
||||||
if (nested_vmcb->control.int_ctl & V_INTR_MASKING_MASK)
|
|
||||||
svm->vcpu.arch.hflags |= HF_VINTR_MASK;
|
|
||||||
else
|
|
Loading…
Reference in New Issue
Block a user