Blame SOURCES/CVE-2021-0512.patch

98e09b
From cd6338e72336f073342df3b49a4d6cb7fb6cdbee Mon Sep 17 00:00:00 2001
98e09b
From: Joe Lawrence <joe.lawrence@redhat.com>
98e09b
Date: Tue, 26 Oct 2021 10:59:31 -0400
98e09b
Subject: [KPATCH CVE-2021-0512] HID: kpatch fixes for CVE-2021-0512
98e09b
98e09b
Kernels:
98e09b
4.18.0-305.el8
98e09b
4.18.0-305.3.1.el8_4
98e09b
4.18.0-305.7.1.el8_4
98e09b
4.18.0-305.10.2.el8_4
98e09b
4.18.0-305.12.1.el8_4
98e09b
4.18.0-305.17.1.el8_4
98e09b
4.18.0-305.19.1.el8_4
98e09b
98e09b
Changes since last build:
98e09b
arches: x86_64 ppc64le
98e09b
hid-core.o: changed function: hid_add_field
98e09b
---------------------------
98e09b
98e09b
Kernels:
98e09b
4.18.0-305.el8
98e09b
4.18.0-305.3.1.el8_4
98e09b
4.18.0-305.7.1.el8_4
98e09b
4.18.0-305.10.2.el8_4
98e09b
4.18.0-305.12.1.el8_4
98e09b
4.18.0-305.17.1.el8_4
98e09b
4.18.0-305.19.1.el8_4
98e09b
98e09b
Modifications: none
98e09b
Kpatch-MR: https://gitlab.com/redhat/prdsc/rhel/src/kpatch/rhel-8/-/merge_requests/5
98e09b
Approved-by: Artem Savkov (@artem.savkov)
98e09b
98e09b
Z-MR: https://gitlab.com/redhat/rhel/src/kernel/rhel-8/-/merge_requests/1350
98e09b
98e09b
KT0 test PASS: https://beaker.engineering.redhat.com/jobs/5942710
98e09b
for kpatch-patch-4_18_0-305-1-6.el8 scratch build:
98e09b
https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=40615898
98e09b
98e09b
commit 8ee375b059ce42c0c38f2593f76077d915eee89e
98e09b
Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
98e09b
Date:   Tue Aug 17 09:26:20 2021 +0200
98e09b
98e09b
    HID: make arrays usage and value to be the same
98e09b
98e09b
    Bugzilla: https://bugzilla.redhat.com/1974941
98e09b
    CVE: CVE-2021-0512
98e09b
    Y-Commit: 87ed552fb937790a5d9439c179bb523cfb0efdc6
98e09b
98e09b
    O-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1974942
98e09b
    Upstream Status: since v5.12
98e09b
    Test: me on the hid-tools test suite
98e09b
98e09b
    commit ed9be64eefe26d7d8b0b5b9fa3ffdf425d87a01f
98e09b
    Author: Will McVicker <willmcvicker@google.com>
98e09b
    Date:   Sat Dec 5 00:48:48 2020 +0000
98e09b
98e09b
        HID: make arrays usage and value to be the same
98e09b
98e09b
        The HID subsystem allows an "HID report field" to have a different
98e09b
        number of "values" and "usages" when it is allocated. When a field
98e09b
        struct is created, the size of the usage array is guaranteed to be at
98e09b
        least as large as the values array, but it may be larger. This leads to
98e09b
        a potential out-of-bounds write in
98e09b
        __hidinput_change_resolution_multipliers() and an out-of-bounds read in
98e09b
        hidinput_count_leds().
98e09b
98e09b
        To fix this, let's make sure that both the usage and value arrays are
98e09b
        the same size.
98e09b
98e09b
        Cc: stable@vger.kernel.org
98e09b
        Signed-off-by: Will McVicker <willmcvicker@google.com>
98e09b
        Signed-off-by: Jiri Kosina <jkosina@suse.cz>
98e09b
98e09b
    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
98e09b
    Signed-off-by: Julio Faracco <jfaracco@redhat.com>
98e09b
98e09b
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
98e09b
---
98e09b
 drivers/hid/hid-core.c | 6 +++---
98e09b
 1 file changed, 3 insertions(+), 3 deletions(-)
98e09b
98e09b
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
98e09b
index d2ecc9c45255..263eca119ff0 100644
98e09b
--- a/drivers/hid/hid-core.c
98e09b
+++ b/drivers/hid/hid-core.c
98e09b
@@ -90,7 +90,7 @@ EXPORT_SYMBOL_GPL(hid_register_report);
98e09b
  * Register a new field for this report.
98e09b
  */
98e09b
 
98e09b
-static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values)
98e09b
+static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages)
98e09b
 {
98e09b
 	struct hid_field *field;
98e09b
 
98e09b
@@ -101,7 +101,7 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned
98e09b
 
98e09b
 	field = kzalloc((sizeof(struct hid_field) +
98e09b
 			 usages * sizeof(struct hid_usage) +
98e09b
-			 values * sizeof(unsigned)), GFP_KERNEL);
98e09b
+			 usages * sizeof(unsigned)), GFP_KERNEL);
98e09b
 	if (!field)
98e09b
 		return NULL;
98e09b
 
98e09b
@@ -300,7 +300,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
98e09b
 	usages = max_t(unsigned, parser->local.usage_index,
98e09b
 				 parser->global.report_count);
98e09b
 
98e09b
-	field = hid_register_field(report, usages, parser->global.report_count);
98e09b
+	field = hid_register_field(report, usages);
98e09b
 	if (!field)
98e09b
 		return 0;
98e09b
 
98e09b
-- 
98e09b
2.31.1
98e09b
98e09b