Blame SOURCES/CVE-2021-3715.patch

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