mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
HID: intel-ish-hid: ignore post-init ENUM_DEVICES from firmware
Some ISH firmware versions (observed on Tiger Lake LP, 8086:a0fc,
GUID {33AECD58-B679-4E54-9BD9-A04D34F0C226}) periodically re-send an
unsolicited HOSTIF_DM_ENUM_DEVICES response roughly every 79 seconds.
The current guard collapses two distinct cases into one condition:
if (!(response_flag) || init_done) -> bad packet + ish_hw_reset
This incorrectly treats a valid post-init firmware announcement as a
corrupted packet, triggering an ISH soft-reset and a full ISHTP
re-initialisation cycle on each occurrence (~1100 times per day on
affected hardware).
Split the check: reject messages with no response flag as before, but
simply discard valid ENUM_DEVICES messages that arrive after init is
complete.
Signed-off-by: Wahid Khan <wahidzk0091@gmail.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Tested-by: Zhang Lixu <lixu.zhang@intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
4253fe22b1
commit
f3f3f6df05
|
|
@ -113,8 +113,7 @@ static void process_recv(struct ishtp_cl *hid_ishtp_cl, void *recv_buf,
|
|||
|
||||
switch (recv_msg->hdr.command & CMD_MASK) {
|
||||
case HOSTIF_DM_ENUM_DEVICES:
|
||||
if ((!(recv_msg->hdr.command & ~CMD_MASK) ||
|
||||
client_data->init_done)) {
|
||||
if (!(recv_msg->hdr.command & ~CMD_MASK)) {
|
||||
++client_data->bad_recv_cnt;
|
||||
report_bad_packet(hid_ishtp_cl, recv_msg,
|
||||
cur_pos,
|
||||
|
|
@ -122,6 +121,8 @@ static void process_recv(struct ishtp_cl *hid_ishtp_cl, void *recv_buf,
|
|||
ish_hw_reset(ishtp_get_ishtp_device(hid_ishtp_cl));
|
||||
break;
|
||||
}
|
||||
if (client_data->init_done)
|
||||
break;
|
||||
client_data->hid_dev_count = (unsigned int)*payload;
|
||||
if (!client_data->hid_devices)
|
||||
client_data->hid_devices = devm_kcalloc(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user