Blame SOURCES/CVE-2021-22555.patch

2c8af9
From: Joel Savitz <jsavitz@redhat.com>
2c8af9
Subject: [KPATCH 7.9] netfilter: x_tables: kpatch fixes for CVE-2021-22555
2c8af9
Date: Wed, 28 Jul 2021 12:03:15 -0400
2c8af9
2c8af9
Kernels:
2c8af9
3.10.0-1160.el7
2c8af9
3.10.0-1160.2.1.el7
2c8af9
3.10.0-1160.2.2.el7
2c8af9
3.10.0-1160.6.1.el7
2c8af9
3.10.0-1160.11.1.el7
2c8af9
3.10.0-1160.15.2.el7
2c8af9
3.10.0-1160.21.1.el7
2c8af9
3.10.0-1160.24.1.el7
2c8af9
3.10.0-1160.25.1.el7
2c8af9
3.10.0-1160.31.1.el7
2c8af9
3.10.0-1160.36.2.el7
2c8af9
2c8af9
Changes since last build:
2c8af9
arches: x86_64 ppc64le
2c8af9
arp_tables.o: changed function: translate_compat_table
2c8af9
ip6_tables.o: changed function: translate_compat_table
2c8af9
ip_tables.o: changed function: translate_compat_table
2c8af9
x_tables.o: changed function: xt_compat_match_from_user
2c8af9
x_tables.o: changed function: xt_compat_target_from_user
2c8af9
---------------------------
2c8af9
2c8af9
Kernels:
2c8af9
3.10.0-1160.el7
2c8af9
3.10.0-1160.2.1.el7
2c8af9
3.10.0-1160.2.2.el7
2c8af9
3.10.0-1160.6.1.el7
2c8af9
3.10.0-1160.11.1.el7
2c8af9
3.10.0-1160.15.2.el7
2c8af9
3.10.0-1160.21.1.el7
2c8af9
3.10.0-1160.24.1.el7
2c8af9
3.10.0-1160.25.1.el7
2c8af9
3.10.0-1160.31.1.el7
2c8af9
3.10.0-1160.36.2.el7
2c8af9
2c8af9
Modifications: none
2c8af9
2c8af9
Z-MR: https://gitlab.com/redhat/rhel/src/kernel/rhel-7/-/merge_requests/201
2c8af9
KT0 test PASS: https://beaker.engineering.redhat.com/jobs/5642298
2c8af9
for scratch build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=38448253
2c8af9
2c8af9
commit 06215319786b979bed0f5eb3138de0506db9d39f
2c8af9
Author: Florian Westphal <fwestpha@redhat.com>
2c8af9
Date:   Fri Jul 9 11:42:55 2021 +0200
2c8af9
2c8af9
    netfilter: x_tables: fix compat match/target pad out-of-bound write
2c8af9
2c8af9
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1980489
2c8af9
    Upstream Status: commit b29c457a65114
2c8af9
    CVE: CVE-2021-22555
2c8af9
2c8af9
    commit b29c457a6511435960115c0f548c4360d5f4801d
2c8af9
    Author: Florian Westphal <fw@strlen.de>
2c8af9
    Date:   Wed Apr 7 21:38:57 2021 +0200
2c8af9
2c8af9
        netfilter: x_tables: fix compat match/target pad out-of-bound write
2c8af9
2c8af9
        xt_compat_match/target_from_user doesn't check that zeroing the area
2c8af9
        to start of next rule won't write past end of allocated ruleset blob.
2c8af9
2c8af9
        Remove this code and zero the entire blob beforehand.
2c8af9
2c8af9
        Reported-by: syzbot+cfc0247ac173f597aaaa@syzkaller.appspotmail.com
2c8af9
        Reported-by: Andy Nguyen <theflow@google.com>
2c8af9
        Fixes: 9fa492cdc160c ("[NETFILTER]: x_tables: simplify compat API")
2c8af9
        Signed-off-by: Florian Westphal <fw@strlen.de>
2c8af9
        Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2c8af9
2c8af9
    Signed-off-by: Florian Westphal <fwestpha@redhat.com>
2c8af9
2c8af9
Signed-off-by: Joel Savitz <jsavitz@redhat.com>
2c8af9
Acked-by: Joe Lawrence <joe.lawrence@redhat.com>
2c8af9
Acked-by: Artem Savkov <asavkov@redhat.com>
2c8af9
Acked-by: Yannick Cote <ycote@redhat.com>
2c8af9
---
2c8af9
 net/ipv4/netfilter/arp_tables.c |  2 ++
2c8af9
 net/ipv4/netfilter/ip_tables.c  |  2 ++
2c8af9
 net/ipv6/netfilter/ip6_tables.c |  2 ++
2c8af9
 net/netfilter/x_tables.c        | 10 ++--------
2c8af9
 4 files changed, 8 insertions(+), 8 deletions(-)
2c8af9
2c8af9
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
2c8af9
index 602d92697038..66ad3b4e194c 100644
2c8af9
--- a/net/ipv4/netfilter/arp_tables.c
2c8af9
+++ b/net/ipv4/netfilter/arp_tables.c
2c8af9
@@ -1364,6 +1364,8 @@ static int translate_compat_table(struct xt_table_info **pinfo,
2c8af9
 	if (!newinfo)
2c8af9
 		goto out_unlock;
2c8af9
 
2c8af9
+	memset(newinfo->entries, 0, size);
2c8af9
+
2c8af9
 	newinfo->number = compatr->num_entries;
2c8af9
 	for (i = 0; i < NF_ARP_NUMHOOKS; i++) {
2c8af9
 		newinfo->hook_entry[i] = info->hook_entry[i];
2c8af9
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
2c8af9
index 3559f7ffa430..d9de653be67e 100644
2c8af9
--- a/net/ipv4/netfilter/ip_tables.c
2c8af9
+++ b/net/ipv4/netfilter/ip_tables.c
2c8af9
@@ -1622,6 +1622,8 @@ translate_compat_table(struct net *net,
2c8af9
 	if (!newinfo)
2c8af9
 		goto out_unlock;
2c8af9
 
2c8af9
+	memset(newinfo->entries, 0, size);
2c8af9
+
2c8af9
 	newinfo->number = compatr->num_entries;
2c8af9
 	for (i = 0; i < NF_INET_NUMHOOKS; i++) {
2c8af9
 		newinfo->hook_entry[i] = compatr->hook_entry[i];
2c8af9
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
2c8af9
index 1772a1797e79..d112bfc86aac 100644
2c8af9
--- a/net/ipv6/netfilter/ip6_tables.c
2c8af9
+++ b/net/ipv6/netfilter/ip6_tables.c
2c8af9
@@ -1626,6 +1626,8 @@ translate_compat_table(struct net *net,
2c8af9
 	if (!newinfo)
2c8af9
 		goto out_unlock;
2c8af9
 
2c8af9
+	memset(newinfo->entries, 0, size);
2c8af9
+
2c8af9
 	newinfo->number = compatr->num_entries;
2c8af9
 	for (i = 0; i < NF_INET_NUMHOOKS; i++) {
2c8af9
 		newinfo->hook_entry[i] = compatr->hook_entry[i];
2c8af9
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
2c8af9
index 76e40ff48b10..affd08ce7df8 100644
2c8af9
--- a/net/netfilter/x_tables.c
2c8af9
+++ b/net/netfilter/x_tables.c
2c8af9
@@ -564,7 +564,7 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
2c8af9
 {
2c8af9
 	const struct xt_match *match = m->u.kernel.match;
2c8af9
 	struct compat_xt_entry_match *cm = (struct compat_xt_entry_match *)m;
2c8af9
-	int pad, off = xt_compat_match_offset(match);
2c8af9
+	int off = xt_compat_match_offset(match);
2c8af9
 	u_int16_t msize = cm->u.user.match_size;
2c8af9
 	char name[sizeof(m->u.user.name)];
2c8af9
 
2c8af9
@@ -574,9 +574,6 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
2c8af9
 		match->compat_from_user(m->data, cm->data);
2c8af9
 	else
2c8af9
 		memcpy(m->data, cm->data, msize - sizeof(*cm));
2c8af9
-	pad = XT_ALIGN(match->matchsize) - match->matchsize;
2c8af9
-	if (pad > 0)
2c8af9
-		memset(m->data + match->matchsize, 0, pad);
2c8af9
 
2c8af9
 	msize += off;
2c8af9
 	m->u.user.match_size = msize;
2c8af9
@@ -913,7 +910,7 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr,
2c8af9
 {
2c8af9
 	const struct xt_target *target = t->u.kernel.target;
2c8af9
 	struct compat_xt_entry_target *ct = (struct compat_xt_entry_target *)t;
2c8af9
-	int pad, off = xt_compat_target_offset(target);
2c8af9
+	int off = xt_compat_target_offset(target);
2c8af9
 	u_int16_t tsize = ct->u.user.target_size;
2c8af9
 	char name[sizeof(t->u.user.name)];
2c8af9
 
2c8af9
@@ -923,9 +920,6 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr,
2c8af9
 		target->compat_from_user(t->data, ct->data);
2c8af9
 	else
2c8af9
 		memcpy(t->data, ct->data, tsize - sizeof(*ct));
2c8af9
-	pad = XT_ALIGN(target->targetsize) - target->targetsize;
2c8af9
-	if (pad > 0)
2c8af9
-		memset(t->data + target->targetsize, 0, pad);
2c8af9
 
2c8af9
 	tsize += off;
2c8af9
 	t->u.user.target_size = tsize;
2c8af9
-- 
2c8af9
2.27.0
2c8af9
2c8af9