Blame SOURCES/CVE-2021-3715.patch

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