|
|
4275d7 |
From 8a2f5f2c9ef2495c8e50f319ae3445c3b92e0633 Mon Sep 17 00:00:00 2001
|
|
|
4275d7 |
From: Ryan Sullivan <rysulliv@redhat.com>
|
|
|
4275d7 |
Date: Tue, 25 Jul 2023 11:39:53 -0400
|
|
|
4275d7 |
Subject: [KPATCH CVE-2023-35788] kpatch fixes for CVE-2023-35788
|
|
|
4275d7 |
|
|
|
4275d7 |
Kernels:
|
|
|
4275d7 |
3.10.0-1160.83.1.el7
|
|
|
4275d7 |
3.10.0-1160.88.1.el7
|
|
|
4275d7 |
3.10.0-1160.90.1.el7
|
|
|
4275d7 |
3.10.0-1160.92.1.el7
|
|
|
4275d7 |
3.10.0-1160.95.1.el7
|
|
|
4275d7 |
|
|
|
4275d7 |
|
|
|
4275d7 |
Kpatch-MR: https://gitlab.com/redhat/prdsc/rhel/src/kpatch/rhel-7/-/merge_requests/56
|
|
|
4275d7 |
Approved-by: Joe Lawrence (@joe.lawrence)
|
|
|
4275d7 |
Changes since last build:
|
|
|
4275d7 |
arches: x86_64 ppc64le
|
|
|
4275d7 |
cls_flower.o: changed function: fl_set_geneve_opt
|
|
|
4275d7 |
---------------------------
|
|
|
4275d7 |
|
|
|
4275d7 |
Modifications:
|
|
|
4275d7 |
adds noinline to fl_set_geneve_opt() definition to make sure that
|
|
|
4275d7 |
kpatch-build can correlate static local variables during the build
|
|
|
4275d7 |
process
|
|
|
4275d7 |
|
|
|
4275d7 |
commit ab0aa1bec5258018fc29e01570fc30d8261b9c03
|
|
|
4275d7 |
Author: Davide Caratti <dcaratti@redhat.com>
|
|
|
4275d7 |
Date: Mon Jun 26 15:48:59 2023 +0200
|
|
|
4275d7 |
|
|
|
4275d7 |
net/sched: flower: fix possible OOB write in fl_set_geneve_opt()
|
|
|
4275d7 |
|
|
|
4275d7 |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2216982
|
|
|
4275d7 |
Upstream Status: net.git commit 4d56304e5827
|
|
|
4275d7 |
CVE: CVE-2023-35788
|
|
|
4275d7 |
|
|
|
4275d7 |
commit 4d56304e5827c8cc8cc18c75343d283af7c4825c
|
|
|
4275d7 |
Author: Hangyu Hua <hbh25y@gmail.com>
|
|
|
4275d7 |
Date: Wed May 31 18:28:04 2023 +0800
|
|
|
4275d7 |
|
|
|
4275d7 |
net/sched: flower: fix possible OOB write in fl_set_geneve_opt()
|
|
|
4275d7 |
|
|
|
4275d7 |
If we send two TCA_FLOWER_KEY_ENC_OPTS_GENEVE packets and their total
|
|
|
4275d7 |
size is 252 bytes(key->enc_opts.len = 252) then
|
|
|
4275d7 |
key->enc_opts.len = opt->length = data_len / 4 = 0 when the third
|
|
|
4275d7 |
TCA_FLOWER_KEY_ENC_OPTS_GENEVE packet enters fl_set_geneve_opt. This
|
|
|
4275d7 |
bypasses the next bounds check and results in an out-of-bounds.
|
|
|
4275d7 |
|
|
|
4275d7 |
Fixes: 0a6e77784f49 ("net/sched: allow flower to match tunnel options")
|
|
|
4275d7 |
Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
|
|
|
4275d7 |
Reviewed-by: Simon Horman <simon.horman@corigine.com>
|
|
|
4275d7 |
Reviewed-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
|
|
|
4275d7 |
Link: https://lore.kernel.org/r/20230531102805.27090-1-hbh25y@gmail.com
|
|
|
4275d7 |
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
|
4275d7 |
|
|
|
4275d7 |
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
|
|
|
4275d7 |
|
|
|
4275d7 |
Signed-off-by: Ryan Sullivan <rysulliv@redhat.com>
|
|
|
4275d7 |
---
|
|
|
4275d7 |
net/sched/cls_flower.c | 5 ++++-
|
|
|
4275d7 |
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
4275d7 |
|
|
|
4275d7 |
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
|
|
|
4275d7 |
index 68287b05c847..dfd219bf9cca 100644
|
|
|
4275d7 |
--- a/net/sched/cls_flower.c
|
|
|
4275d7 |
+++ b/net/sched/cls_flower.c
|
|
|
4275d7 |
@@ -587,7 +587,7 @@ static void fl_set_key_ip(struct nlattr **tb, bool encap,
|
|
|
4275d7 |
fl_set_key_val(tb, &key->ttl, ttl_key, &mask->ttl, ttl_mask, sizeof(key->ttl));
|
|
|
4275d7 |
}
|
|
|
4275d7 |
|
|
|
4275d7 |
-static int fl_set_geneve_opt(const struct nlattr *nla, struct fl_flow_key *key,
|
|
|
4275d7 |
+noinline static int fl_set_geneve_opt(const struct nlattr *nla, struct fl_flow_key *key,
|
|
|
4275d7 |
int depth, int option_len)
|
|
|
4275d7 |
{
|
|
|
4275d7 |
struct nlattr *tb[TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX + 1];
|
|
|
4275d7 |
@@ -598,6 +598,9 @@ static int fl_set_geneve_opt(const struct nlattr *nla, struct fl_flow_key *key,
|
|
|
4275d7 |
if (option_len > sizeof(struct geneve_opt))
|
|
|
4275d7 |
data_len = option_len - sizeof(struct geneve_opt);
|
|
|
4275d7 |
|
|
|
4275d7 |
+ if (key->enc_opts.len > FLOW_DIS_TUN_OPTS_MAX - 4)
|
|
|
4275d7 |
+ return -ERANGE;
|
|
|
4275d7 |
+
|
|
|
4275d7 |
opt = (struct geneve_opt *)&key->enc_opts.data[key->enc_opts.len];
|
|
|
4275d7 |
memset(opt, 0xff, option_len);
|
|
|
4275d7 |
opt->length = data_len / 4;
|
|
|
4275d7 |
--
|
|
|
4275d7 |
2.40.1
|
|
|
4275d7 |
|
|
|
4275d7 |
|