Blame SOURCES/CVE-2021-3715.patch

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