|
|
b5132d |
From 8a3e286f2ff1f83ffd645cbad1cb49f80ab2ab00 Mon Sep 17 00:00:00 2001
|
|
|
b5132d |
From: Ryan Sullivan <rysulliv@redhat.com>
|
|
|
b5132d |
Date: Tue, 17 Oct 2023 13:28:46 -0400
|
|
|
b5132d |
Subject: [KPATCH CVE-2023-3776] kpatch fixes for CVE-2023-3776
|
|
|
b5132d |
|
|
|
b5132d |
Kernels:
|
|
|
b5132d |
3.10.0-1160.90.1.el7
|
|
|
b5132d |
3.10.0-1160.92.1.el7
|
|
|
b5132d |
3.10.0-1160.95.1.el7
|
|
|
b5132d |
3.10.0-1160.99.1.el7
|
|
|
b5132d |
3.10.0-1160.102.1.el7
|
|
|
b5132d |
|
|
|
b5132d |
|
|
|
b5132d |
Kpatch-MR: https://gitlab.com/redhat/prdsc/rhel/src/kpatch/rhel-7/-/merge_requests/61
|
|
|
b5132d |
Approved-by: Joe Lawrence (@joe.lawrence)
|
|
|
b5132d |
Approved-by: Yannick Cote (@ycote1)
|
|
|
b5132d |
Changes since last build:
|
|
|
b5132d |
arches: x86_64 ppc64le
|
|
|
b5132d |
cls_fw.o: changed function: fw_change
|
|
|
b5132d |
cls_fw.o: changed function: fw_set_parms
|
|
|
b5132d |
cls_route.o: changed function: route4_change
|
|
|
b5132d |
cls_u32.o: changed function: u32_change
|
|
|
b5132d |
sch_qfq.o: changed function: qfq_enqueue
|
|
|
b5132d |
---------------------------
|
|
|
b5132d |
|
|
|
b5132d |
Modifications: none
|
|
|
b5132d |
|
|
|
b5132d |
commit 726e9f3d88c729cdae09768c94e588deebdb9d52
|
|
|
b5132d |
Author: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
Date: Mon Jan 23 17:17:17 2023 -0300
|
|
|
b5132d |
|
|
|
b5132d |
KVM: x86: rename argument to kvm_set_tsc_khz
|
|
|
b5132d |
|
|
|
b5132d |
commit 4941b8cb3746f09bb102f7a5d64d878e96a0c6cd
|
|
|
b5132d |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2152838
|
|
|
b5132d |
JIRA: https://issues.redhat.com/browse/RHELPLAN-141963
|
|
|
b5132d |
Testing: Tested by QE
|
|
|
b5132d |
|
|
|
b5132d |
This refers to the desired (scaled) frequency, which is called
|
|
|
b5132d |
user_tsc_khz in the rest of the file.
|
|
|
b5132d |
|
|
|
b5132d |
Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
b5132d |
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
|
|
|
b5132d |
commit 866faa0e99083ee93d04d3c37065cf8dbfc51a34
|
|
|
b5132d |
Author: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
Date: Mon Jan 23 17:24:19 2023 -0300
|
|
|
b5132d |
|
|
|
b5132d |
KVM: x86: rewrite handling of scaled TSC for kvmclock
|
|
|
b5132d |
|
|
|
b5132d |
commit 78db6a5037965429c04d708281f35a6e5562d31b
|
|
|
b5132d |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2152838
|
|
|
b5132d |
Testing: Tested by QE
|
|
|
b5132d |
JIRA: https://issues.redhat.com/browse/RHELPLAN-141963
|
|
|
b5132d |
|
|
|
b5132d |
This is the same as before:
|
|
|
b5132d |
|
|
|
b5132d |
kvm_scale_tsc(tgt_tsc_khz)
|
|
|
b5132d |
= tgt_tsc_khz * ratio
|
|
|
b5132d |
= tgt_tsc_khz * user_tsc_khz / tsc_khz (see set_tsc_khz)
|
|
|
b5132d |
= user_tsc_khz (see kvm_guest_time_update)
|
|
|
b5132d |
= vcpu->arch.virtual_tsc_khz (see kvm_set_tsc_khz)
|
|
|
b5132d |
|
|
|
b5132d |
However, computing it through kvm_scale_tsc will make it possible
|
|
|
b5132d |
to include the NTP correction in tgt_tsc_khz.
|
|
|
b5132d |
|
|
|
b5132d |
Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
b5132d |
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
|
|
|
b5132d |
commit bde6eebb5708ecd38db0023e657d38058e0d962f
|
|
|
b5132d |
Author: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
Date: Wed Jan 25 16:07:18 2023 -0300
|
|
|
b5132d |
|
|
|
b5132d |
KVM: x86: add bit to indicate correct tsc_shift
|
|
|
b5132d |
|
|
|
b5132d |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2152838
|
|
|
b5132d |
Testing: Tested by QE
|
|
|
b5132d |
Upstream Status: RHEL7 only
|
|
|
b5132d |
JIRA: https://issues.redhat.com/browse/RHELPLAN-141963
|
|
|
b5132d |
|
|
|
b5132d |
This changeset is unique to RHEL-7 since it was decided
|
|
|
b5132d |
it is not necessary upstream:
|
|
|
b5132d |
|
|
|
b5132d |
"I don't think it's justifiable to further complicate the userspace API for a
|
|
|
b5132d |
bug that's been fixed six years ago. I'd be very surprised if any combination
|
|
|
b5132d |
of modern upstream {QEMU,kernel} is going to do a successful migration from
|
|
|
b5132d |
such an old {QEMU,kernel}. RHEL/CentOS are able to do so because *specific
|
|
|
b5132d |
pairs* have been tested, but as far as upstream is concerned this adds
|
|
|
b5132d |
complexity that absolutely no one will use."
|
|
|
b5132d |
|
|
|
b5132d |
Before commit 78db6a5037965429c04d708281f35a6e5562d31b,
|
|
|
b5132d |
kvm_guest_time_update() would use vcpu->virtual_tsc_khz to calculate
|
|
|
b5132d |
tsc_shift value in the vcpus pvclock structure written to guest memory.
|
|
|
b5132d |
|
|
|
b5132d |
For those kernels, if vcpu->virtual_tsc_khz != tsc_khz (which can be the
|
|
|
b5132d |
case when guest state is restored via migration, or if tsc-khz option is
|
|
|
b5132d |
passed to QEMU), and TSC scaling is not enabled (which happens if the
|
|
|
b5132d |
difference between the frequency requested via KVM_SET_TSC_KHZ and the
|
|
|
b5132d |
host TSC KHZ is smaller than 250ppm), then there can be a difference
|
|
|
b5132d |
between what KVM_GET_CLOCK would return and what the guest reads as
|
|
|
b5132d |
kvmclock value.
|
|
|
b5132d |
|
|
|
b5132d |
When KVM_SET_CLOCK'ing what is read with KVM_GET_CLOCK, the
|
|
|
b5132d |
guest can observe a forward or backwards time jump.
|
|
|
b5132d |
|
|
|
b5132d |
Advertise to userspace that current kernel contains
|
|
|
b5132d |
this fix, so QEMU can workaround the problem by reading
|
|
|
b5132d |
pvclock via guest memory directly otherwise.
|
|
|
b5132d |
|
|
|
b5132d |
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
|
|
|
b5132d |
|
|
|
b5132d |
commit 373ed8339c956ce1d9049737bab779f143fc1267
|
|
|
b5132d |
Author: Davide Caratti <dcaratti@redhat.com>
|
|
|
b5132d |
Date: Tue Aug 8 11:57:51 2023 +0200
|
|
|
b5132d |
|
|
|
b5132d |
net/sched: cls_fw: Fix improper refcount update leads to use-after-free
|
|
|
b5132d |
|
|
|
b5132d |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2225639
|
|
|
b5132d |
CVE: CVE-2023-3776
|
|
|
b5132d |
Upstream Status: net.git commit 0323bce598ee
|
|
|
b5132d |
Conflicts:
|
|
|
b5132d |
- net/sched/cls_fw.c: context mismatch because of missing backport
|
|
|
b5132d |
of upstream commit a51486266c3b ("net: sched: remove NET_CLS_IND
|
|
|
b5132d |
config option")
|
|
|
b5132d |
|
|
|
b5132d |
commit 0323bce598eea038714f941ce2b22541c46d488f
|
|
|
b5132d |
Author: M A Ramdhan <ramdhan@starlabs.sg>
|
|
|
b5132d |
Date: Wed Jul 5 12:15:30 2023 -0400
|
|
|
b5132d |
|
|
|
b5132d |
net/sched: cls_fw: Fix improper refcount update leads to use-after-free
|
|
|
b5132d |
|
|
|
b5132d |
In the event of a failure in tcf_change_indev(), fw_set_parms() will
|
|
|
b5132d |
immediately return an error after incrementing or decrementing
|
|
|
b5132d |
reference counter in tcf_bind_filter(). If attacker can control
|
|
|
b5132d |
reference counter to zero and make reference freed, leading to
|
|
|
b5132d |
use after free.
|
|
|
b5132d |
|
|
|
b5132d |
In order to prevent this, move the point of possible failure above the
|
|
|
b5132d |
point where the TC_FW_CLASSID is handled.
|
|
|
b5132d |
|
|
|
b5132d |
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
|
|
|
b5132d |
Reported-by: M A Ramdhan <ramdhan@starlabs.sg>
|
|
|
b5132d |
Signed-off-by: M A Ramdhan <ramdhan@starlabs.sg>
|
|
|
b5132d |
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
|
|
|
b5132d |
Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
|
|
|
b5132d |
Message-ID: <20230705161530.52003-1-ramdhan@starlabs.sg>
|
|
|
b5132d |
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
|
b5132d |
|
|
|
b5132d |
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
|
|
|
b5132d |
|
|
|
b5132d |
Signed-off-by: Ryan Sullivan <rysulliv@redhat.com>
|
|
|
b5132d |
---
|
|
|
b5132d |
net/sched/cls_fw.c | 10 +++++-----
|
|
|
b5132d |
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
|
b5132d |
|
|
|
b5132d |
diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c
|
|
|
b5132d |
index e05043266620..3427222f8e60 100644
|
|
|
b5132d |
--- a/net/sched/cls_fw.c
|
|
|
b5132d |
+++ b/net/sched/cls_fw.c
|
|
|
b5132d |
@@ -218,11 +218,6 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp,
|
|
|
b5132d |
if (err < 0)
|
|
|
b5132d |
return err;
|
|
|
b5132d |
|
|
|
b5132d |
- if (tb[TCA_FW_CLASSID]) {
|
|
|
b5132d |
- f->res.classid = nla_get_u32(tb[TCA_FW_CLASSID]);
|
|
|
b5132d |
- tcf_bind_filter(tp, &f->res, base);
|
|
|
b5132d |
- }
|
|
|
b5132d |
-
|
|
|
b5132d |
#ifdef CONFIG_NET_CLS_IND
|
|
|
b5132d |
if (tb[TCA_FW_INDEV]) {
|
|
|
b5132d |
int ret;
|
|
|
b5132d |
@@ -241,6 +236,11 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp,
|
|
|
b5132d |
} else if (head->mask != 0xFFFFFFFF)
|
|
|
b5132d |
return err;
|
|
|
b5132d |
|
|
|
b5132d |
+ if (tb[TCA_FW_CLASSID]) {
|
|
|
b5132d |
+ f->res.classid = nla_get_u32(tb[TCA_FW_CLASSID]);
|
|
|
b5132d |
+ tcf_bind_filter(tp, &f->res, base);
|
|
|
b5132d |
+ }
|
|
|
b5132d |
+
|
|
|
b5132d |
return 0;
|
|
|
b5132d |
}
|
|
|
b5132d |
|
|
|
b5132d |
--
|
|
|
b5132d |
2.41.0
|
|
|
b5132d |
|
|
|
b5132d |
|