Blame SOURCES/CVE-2021-33909.patch

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