Blame SOURCES/CVE-2021-33909.patch

2e21c8
From: Joe Lawrence <joe.lawrence@redhat.com>
2e21c8
Date: Tue,  6 Jul 2021 13:18:44 -0400
2e21c8
Subject: [kernel team] [EMBARGOED KPATCH 7.9] seq_file: kpatch fix for
2e21c8
	CVE-2021-33909
2e21c8
2e21c8
Kernels:
2e21c8
3.10.0-1160.el7
2e21c8
3.10.0-1160.2.1.el7
2e21c8
3.10.0-1160.2.2.el7
2e21c8
3.10.0-1160.6.1.el7
2e21c8
3.10.0-1160.11.1.el7
2e21c8
3.10.0-1160.15.2.el7
2e21c8
3.10.0-1160.21.1.el7
2e21c8
3.10.0-1160.24.1.el7
2e21c8
3.10.0-1160.25.1.el7
2e21c8
3.10.0-1160.31.1.el7
2e21c8
2e21c8
Changes since last build:
2e21c8
arches: x86_64 ppc64le
2e21c8
seq_file.o: changed function: seq_read
2e21c8
seq_file.o: changed function: single_open_size
2e21c8
seq_file.o: changed function: traverse
2e21c8
---------------------------
2e21c8
2e21c8
Kernels:
2e21c8
3.10.0-1160.el7
2e21c8
3.10.0-1160.2.1.el7
2e21c8
3.10.0-1160.2.2.el7
2e21c8
3.10.0-1160.6.1.el7
2e21c8
3.10.0-1160.11.1.el7
2e21c8
3.10.0-1160.15.2.el7
2e21c8
3.10.0-1160.21.1.el7
2e21c8
3.10.0-1160.24.1.el7
2e21c8
3.10.0-1160.25.1.el7
2e21c8
3.10.0-1160.31.1.el7
2e21c8
2e21c8
Modifications:
2e21c8
- inline PAGE_CACHE_SHIFT rather than including linux/pagemap.h and
2e21c8
  fighting kABI fallout (and potentially more inadvertent changes)
2e21c8
2e21c8
commit 1236d5dd5b9f13ccbb44979a5652a4b137b968a4
2e21c8
Author: Ian Kent <ikent@redhat.com>
2e21c8
Date:   Thu Jul 1 09:13:59 2021 +0800
2e21c8
2e21c8
    seq_file: Disallow extremely large seq buffer allocations
2e21c8
2e21c8
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1975251
2e21c8
2e21c8
    Brew build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=37832573
2e21c8
2e21c8
    Testing: The patch has been tested by Qualys and it has been
2e21c8
             confirmed the patch fixes the problem.
2e21c8
2e21c8
    Upstream status: RHEL only (CVE-2021-33909)
2e21c8
2e21c8
    Conflicts: include/fs.h uses PAGE_CACHE_SHIFT in the definition of
2e21c8
      MAX_RW_COUNT which isn't defined in fs/seq_file.c and including
2e21c8
      linux/pagemap.h breaks kabi (since it makes kabi aware of additional
2e21c8
      structs) even though there are no changes to any structures. So the
2e21c8
      include needs to be added and excluded from the kabi calculation.
2e21c8
2e21c8
    Author: Eric Sandeen <sandeen@redhat.com>
2e21c8
2e21c8
    seq_file: Disallow extremely large seq buffer allocations
2e21c8
2e21c8
    There is no reasonable need for a buffer larger than this,
2e21c8
    and it avoids int overflow pitfalls.
2e21c8
2e21c8
    Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
2e21c8
    Signed-off-by: Eric Sandeen <sandeen@redhat.com>
2e21c8
2e21c8
    Signed-off-by: Ian Kent <ikent@redhat.com>
2e21c8
2e21c8
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
2e21c8
Acked-by: Artem Savkov <asavkov@redhat.com>
2e21c8
Acked-by: Yannick Cote <ycote@redhat.com>
2e21c8
---
2e21c8
2e21c8
Z-MR: https://gitlab.com/redhat/prdsc/rhel/src/kernel-private/rhel-7/-/merge_requests/7
2e21c8
2e21c8
KT0 test PASS: https://beaker.engineering.redhat.com/jobs/5525685
2e21c8
for kpatch-patch-3_10_0-1160-1-7.el7 scratch build:
2e21c8
https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=37846414
2e21c8
2e21c8
 fs/seq_file.c | 23 +++++++++++++++++++++++
2e21c8
 1 file changed, 23 insertions(+)
2e21c8
2e21c8
diff --git a/fs/seq_file.c b/fs/seq_file.c
2e21c8
index bc7a9ec855aa..daef8f4bdbd0 100644
2e21c8
--- a/fs/seq_file.c
2e21c8
+++ b/fs/seq_file.c
2e21c8
@@ -5,6 +5,26 @@
2e21c8
  * initial implementation -- AV, Oct 2001.
2e21c8
  */
2e21c8
 
2e21c8
+/* inline linux/pagemap.h :: PAGE_CACHE_MASK and dependency values */
2e21c8
+
2e21c8
+/* arch/x86/include/asm/page_types.h */
2e21c8
+#ifdef __x86_64__
2e21c8
+# define PAGE_CACHE_MASK	(~((1UL << 12)-1))
2e21c8
+#endif
2e21c8
+
2e21c8
+/* arch/powerpc/include/asm/page.h */
2e21c8
+#ifdef __powerpc64__
2e21c8
+# if defined(CONFIG_PPC_256K_PAGES)
2e21c8
+#  define PAGE_CACHE_MASK	(~((1 << 18) - 1))
2e21c8
+# elif defined(CONFIG_PPC_64K_PAGES)
2e21c8
+#  define PAGE_CACHE_MASK	(~((1 << 16) - 1))
2e21c8
+# elif defined(CONFIG_PPC_16K_PAGES)
2e21c8
+#  define PAGE_CACHE_MASK	(~((1 << 14) - 1))
2e21c8
+# else
2e21c8
+#  define PAGE_CACHE_MASK	(~((1 << 12) - 1))
2e21c8
+# endif
2e21c8
+#endif
2e21c8
+
2e21c8
 #include <linux/fs.h>
2e21c8
 #include <linux/export.h>
2e21c8
 #include <linux/seq_file.h>
2e21c8
@@ -26,6 +46,9 @@ static void seq_set_overflow(struct seq_file *m)
2e21c8
 
2e21c8
 static void *seq_buf_alloc(unsigned long size)
2e21c8
 {
2e21c8
+	if (unlikely(size > MAX_RW_COUNT))
2e21c8
+		return NULL;
2e21c8
+
2e21c8
 	return kvmalloc(size, GFP_KERNEL);
2e21c8
 }
2e21c8
 
2e21c8
-- 
2e21c8
2.26.3
2e21c8
2e21c8