mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
HID: hid-oxp: use cancel_delayed_work_sync() in remove
oxp_hid_remove() uses cancel_delayed_work() for all three delayed work
items. cancel_delayed_work() only dequeues a pending work item without
waiting for a currently executing callback to finish. If any of the
work callbacks (oxp_rgb_queue_fn, oxp_btn_queue_fn, oxp_mcu_init_fn) is
running at the time of removal, the callback continues executing
concurrently with hid_hw_close() and hid_hw_stop(), accessing the HID
device after it has been closed and stopped.
Use cancel_delayed_work_sync() instead to ensure that any in-progress
work callback completes before device teardown proceeds.
Fixes: 84910c459d ("HID: hid-oxp: Add OneXPlayer configuration driver")
Cc: stable@vger.kernel.org
Signed-off-by: Tristan Madani <tristan@talencesecurity.com>
Reviewed-by: Derek J. Clark <derekjohn.clark@gmail.com>
Link: https://lore.kernel.org/r/20260804-oxp-fix-v2-1-b2d56e4c8a2c@cherr.cc
Link: https://lore.kernel.org/r/20260804-oxp-fix-v1-1-51a4fe787167@cherr.cc
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
39e8e08571
commit
abd24922c2
|
|
@ -1552,9 +1552,9 @@ static int oxp_hid_probe(struct hid_device *hdev,
|
|||
|
||||
static void oxp_hid_remove(struct hid_device *hdev)
|
||||
{
|
||||
cancel_delayed_work(&drvdata.oxp_rgb_queue);
|
||||
cancel_delayed_work(&drvdata.oxp_btn_queue);
|
||||
cancel_delayed_work(&drvdata.oxp_mcu_init);
|
||||
cancel_delayed_work_sync(&drvdata.oxp_rgb_queue);
|
||||
cancel_delayed_work_sync(&drvdata.oxp_btn_queue);
|
||||
cancel_delayed_work_sync(&drvdata.oxp_mcu_init);
|
||||
hid_hw_close(hdev);
|
||||
hid_hw_stop(hdev);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user