linux/drivers/hid/intel-ish-hid
Tanu Malhotra 6c8cc40c58 HID: intel-ish-hid: Fix kernel panic during warm reset
commit 38518593ec upstream.

During warm reset device->fw_client is set to NULL. If a bus driver is
registered after this NULL setting and before new firmware clients are
enumerated by ISHTP, kernel panic will result in the function
ishtp_cl_bus_match(). This is because of reference to
device->fw_client->props.protocol_name.

ISH firmware after getting successfully loaded, sends a warm reset
notification to remove all clients from the bus and sets
device->fw_client to NULL. Until kernel v5.15, all enabled ISHTP kernel
module drivers were loaded right after any of the first ISHTP device was
registered, regardless of whether it was a matched or an unmatched
device. This resulted in all drivers getting registered much before the
warm reset notification from ISH.

Starting kernel v5.16, this issue got exposed after the change was
introduced to load only bus drivers for the respective matching devices.
In this scenario, cros_ec_ishtp device and cros_ec_ishtp driver are
registered after the warm reset device fw_client NULL setting.
cros_ec_ishtp driver_register() triggers the callback to
ishtp_cl_bus_match() to match ISHTP driver to the device and causes kernel
panic in guid_equal() when dereferencing fw_client NULL pointer to get
protocol_name.

Fixes: f155dfeaa4 ("platform/x86: isthp_eclite: only load for matching devices")
Fixes: facfe0a4fd ("platform/chrome: chros_ec_ishtp: only load for matching devices")
Fixes: 0d0cccc0fd ("HID: intel-ish-hid: hid-client: only load for matching devices")
Fixes: 44e2a58cb8 ("HID: intel-ish-hid: fw-loader: only load for matching devices")
Cc: <stable@vger.kernel.org> # 5.16+
Signed-off-by: Tanu Malhotra <tanu.malhotra@intel.com>
Tested-by: Shaunak Saha <shaunak.saha@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2023-04-20 12:35:13 +02:00
..
ipc HID: intel-ish-hid: ipc: Fix potential use-after-free in work function 2023-03-30 12:49:16 +02:00
ishtp HID: intel-ish-hid: Fix kernel panic during warm reset 2023-04-20 12:35:13 +02:00
ishtp-fw-loader.c HID: intel-ish-hid: Use dma_alloc_coherent for firmware update 2022-03-14 10:39:04 +01:00
ishtp-hid-client.c ID: intel-ish-hid: hid-client: drop unexpected word "the" in the comments 2022-07-21 11:56:10 +02:00
ishtp-hid.c HID: intel-ish-hid: Fix potential copy/paste error 2021-04-07 17:56:34 +02:00
ishtp-hid.h HID: ishtp-hid-clientHID: ishtp-hid-client: Fix comment typo 2022-08-25 11:35:44 +02:00
Kconfig HID: intel-ish-hid: Set ISH driver depends on x86 2021-06-14 15:55:09 +02:00
Makefile treewide: prefix header search paths with $(srctree)/ 2019-05-18 11:49:57 +09:00