Blame SOURCES/CVE-2021-33909.patch

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