Patch "HID: intel-ish-hid: Fix use-after-free issue in ishtp_hid_remove()" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    HID: intel-ish-hid: Fix use-after-free issue in ishtp_hid_remove()

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     hid-intel-ish-hid-fix-use-after-free-issue-in-ishtp_.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit eb9d3fb72f9d15f2c0a00d137ee70c4711f934e7
Author: Zhang Lixu <lixu.zhang@xxxxxxxxx>
Date:   Tue Feb 18 14:37:30 2025 +0800

    HID: intel-ish-hid: Fix use-after-free issue in ishtp_hid_remove()
    
    [ Upstream commit 07583a0010696a17fb0942e0b499a62785c5fc9f ]
    
    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: 0b28cb4bcb17 ("HID: intel-ish-hid: ISH HID client driver")
    Signed-off-by: Zhang Lixu <lixu.zhang@xxxxxxxxx>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>
    Signed-off-by: Jiri Kosina <jkosina@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/hid/intel-ish-hid/ishtp-hid.c b/drivers/hid/intel-ish-hid/ishtp-hid.c
index 14c271d7d8a94..0377dac3fc9a0 100644
--- a/drivers/hid/intel-ish-hid/ishtp-hid.c
+++ b/drivers/hid/intel-ish-hid/ishtp-hid.c
@@ -261,12 +261,14 @@ int ishtp_hid_probe(unsigned int cur_hid_dev,
  */
 void ishtp_hid_remove(struct ishtp_cl_data *client_data)
 {
+	void *data;
 	int i;
 
 	for (i = 0; i < client_data->num_hid_devices; ++i) {
 		if (client_data->hid_sensor_hubs[i]) {
-			kfree(client_data->hid_sensor_hubs[i]->driver_data);
+			data = client_data->hid_sensor_hubs[i]->driver_data;
 			hid_destroy_device(client_data->hid_sensor_hubs[i]);
+			kfree(data);
 			client_data->hid_sensor_hubs[i] = NULL;
 		}
 	}




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux