Blame SOURCES/CVE-2021-3715.patch

44f5dc
From: Artem Savkov <asavkov@redhat.com>
44f5dc
Subject: [RHEL-7.9 CVE-2021-3715 KPATCH] net_sched: cls_route: remove the right filter from hashtable
44f5dc
Date: Mon, 30 Aug 2021 17:33:51 +0200
44f5dc
44f5dc
Kernels:
44f5dc
3.10.0-1160.el7
44f5dc
3.10.0-1160.2.1.el7
44f5dc
3.10.0-1160.2.2.el7
44f5dc
3.10.0-1160.6.1.el7
44f5dc
3.10.0-1160.11.1.el7
44f5dc
3.10.0-1160.15.2.el7
44f5dc
3.10.0-1160.21.1.el7
44f5dc
3.10.0-1160.24.1.el7
44f5dc
3.10.0-1160.25.1.el7
44f5dc
3.10.0-1160.31.1.el7
44f5dc
3.10.0-1160.36.2.el7
44f5dc
3.10.0-1160.41.1.el7
44f5dc
44f5dc
Changes since last build:
44f5dc
arches: x86_64 ppc64le
44f5dc
cls_route.o: changed function: route4_change
44f5dc
---------------------------
44f5dc
44f5dc
Kernels:
44f5dc
3.10.0-1160.el7
44f5dc
3.10.0-1160.2.1.el7
44f5dc
3.10.0-1160.2.2.el7
44f5dc
3.10.0-1160.6.1.el7
44f5dc
3.10.0-1160.11.1.el7
44f5dc
3.10.0-1160.15.2.el7
44f5dc
3.10.0-1160.21.1.el7
44f5dc
3.10.0-1160.24.1.el7
44f5dc
3.10.0-1160.25.1.el7
44f5dc
3.10.0-1160.31.1.el7
44f5dc
3.10.0-1160.36.2.el7
44f5dc
44f5dc
Modifications: none
44f5dc
Z-MR: https://gitlab.com/redhat/rhel/src/kernel/rhel-7/-/merge_requests/251
44f5dc
44f5dc
commit f4e1814eb56167451ddd819fccb951178f97660b
44f5dc
Author: Ivan Vecera <ivecera@redhat.com>
44f5dc
Date:   Tue Aug 17 12:21:33 2021 +0200
44f5dc
44f5dc
    net_sched: cls_route: remove the right filter from hashtable
44f5dc
44f5dc
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1992926
44f5dc
44f5dc
    commit ef299cc3fa1a9e1288665a9fdc8bff55629fd359
44f5dc
    Author: Cong Wang <xiyou.wangcong@gmail.com>
44f5dc
    Date:   Fri Mar 13 22:29:54 2020 -0700
44f5dc
44f5dc
        net_sched: cls_route: remove the right filter from hashtable
44f5dc
44f5dc
        route4_change() allocates a new filter and copies values from
44f5dc
        the old one. After the new filter is inserted into the hash
44f5dc
        table, the old filter should be removed and freed, as the final
44f5dc
        step of the update.
44f5dc
44f5dc
        However, the current code mistakenly removes the new one. This
44f5dc
        looks apparently wrong to me, and it causes double "free" and
44f5dc
        use-after-free too, as reported by syzbot.
44f5dc
44f5dc
        Reported-and-tested-by: syzbot+f9b32aaacd60305d9687@syzkaller.appspotmail.com
44f5dc
        Reported-and-tested-by: syzbot+2f8c233f131943d6056d@syzkaller.appspotmail.com
44f5dc
        Reported-and-tested-by: syzbot+9c2df9fd5e9445b74e01@syzkaller.appspotmail.com
44f5dc
        Fixes: 1109c00547fc ("net: sched: RCU cls_route")
44f5dc
        Cc: Jamal Hadi Salim <jhs@mojatatu.com>
44f5dc
        Cc: Jiri Pirko <jiri@resnulli.us>
44f5dc
        Cc: John Fastabend <john.fastabend@gmail.com>
44f5dc
        Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
44f5dc
        Signed-off-by: David S. Miller <davem@davemloft.net>
44f5dc
44f5dc
    Signed-off-by: Ivan Vecera <ivecera@redhat.com>
44f5dc
44f5dc
Signed-off-by: Artem Savkov <asavkov@redhat.com>
44f5dc
Acked-by: Joe Lawrence <joe.lawrence@redhat.com>
44f5dc
---
44f5dc
 net/sched/cls_route.c | 4 ++--
44f5dc
 1 file changed, 2 insertions(+), 2 deletions(-)
44f5dc
44f5dc
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
44f5dc
index 7bd464e8d084..2fed29fa504e 100644
44f5dc
--- a/net/sched/cls_route.c
44f5dc
+++ b/net/sched/cls_route.c
44f5dc
@@ -534,8 +534,8 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
44f5dc
 			fp = &b->ht[h];
44f5dc
 			for (pfp = rtnl_dereference(*fp); pfp;
44f5dc
 			     fp = &pfp->next, pfp = rtnl_dereference(*fp)) {
44f5dc
-				if (pfp == f) {
44f5dc
-					*fp = f->next;
44f5dc
+				if (pfp == fold) {
44f5dc
+					rcu_assign_pointer(*fp, fold->next);
44f5dc
 					break;
44f5dc
 				}
44f5dc
 			}
44f5dc
-- 
44f5dc
2.31.1
44f5dc
44f5dc