Blame SOURCES/CVE-2021-0512.patch

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