Skip to content

Commit 07583a0

Browse files
lixuzhaJiri Kosina
authored andcommitted
HID: intel-ish-hid: Fix use-after-free issue in ishtp_hid_remove()
The system can experience a random crash a few minutes after the driver is removed. This issue occurs due to improper handling of memory freeing in the ishtp_hid_remove() function. The function currently frees the `driver_data` directly within the loop that destroys the HID devices, which can lead to accessing freed memory. Specifically, `hid_destroy_device()` uses `driver_data` when it calls `hid_ishtp_set_feature()` to power off the sensor, so freeing `driver_data` beforehand can result in accessing invalid memory. This patch resolves the issue by storing the `driver_data` in a temporary variable before calling `hid_destroy_device()`, and then freeing the `driver_data` after the device is destroyed. Fixes: 0b28cb4 ("HID: intel-ish-hid: ISH HID client driver") Signed-off-by: Zhang Lixu <[email protected]> Acked-by: Srinivas Pandruvada <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent 8239878 commit 07583a0

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

drivers/hid/intel-ish-hid/ishtp-hid.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,14 @@ int ishtp_hid_probe(unsigned int cur_hid_dev,
261261
*/
262262
void ishtp_hid_remove(struct ishtp_cl_data *client_data)
263263
{
264+
void *data;
264265
int i;
265266

266267
for (i = 0; i < client_data->num_hid_devices; ++i) {
267268
if (client_data->hid_sensor_hubs[i]) {
268-
kfree(client_data->hid_sensor_hubs[i]->driver_data);
269+
data = client_data->hid_sensor_hubs[i]->driver_data;
269270
hid_destroy_device(client_data->hid_sensor_hubs[i]);
271+
kfree(data);
270272
client_data->hid_sensor_hubs[i] = NULL;
271273
}
272274
}

0 commit comments

Comments
 (0)