From b8a7e36e04dc3bd3fb029f17ddd648e9cf0752dc Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 12 Dec 2023 15:19:29 +0000 Subject: [PATCH] Revert "HID: fix HID device resource race between HID core and debugging support" This reverts commit f8467afa754d734ca061fcaa174b2ceaebcba842 which is commit fc43e9c857b7aa55efba9398419b14d9e35dcc7d upstream. It breaks the current Android ABI, and if needed, can be brought back in an abi-safe way in the future. Bug: 161946584 Change-Id: I38d2bef8b98b0a915b74889c2bc49e12c118195a Signed-off-by: Greg Kroah-Hartman --- drivers/hid/hid-core.c | 14 +++----------- drivers/hid/hid-debug.c | 3 --- include/linux/hid.h | 3 --- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index ef325f178e9a..f950e930edc8 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -703,20 +703,13 @@ static void hid_close_report(struct hid_device *device) * Free a device structure, all reports, and all fields. */ -void hiddev_free(struct kref *ref) -{ - struct hid_device *hid = container_of(ref, struct hid_device, ref); - - hid_close_report(hid); - kfree(hid->dev_rdesc); - kfree(hid); -} - static void hid_device_release(struct device *dev) { struct hid_device *hid = to_hid_device(dev); - kref_put(&hid->ref, hiddev_free); + hid_close_report(hid); + kfree(hid->dev_rdesc); + kfree(hid); } /* @@ -2500,7 +2493,6 @@ struct hid_device *hid_allocate_device(void) spin_lock_init(&hdev->debug_list_lock); sema_init(&hdev->driver_input_lock, 1); mutex_init(&hdev->ll_open_lock); - kref_init(&hdev->ref); return hdev; } diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c index 81da80f0c75b..1f60a381ae63 100644 --- a/drivers/hid/hid-debug.c +++ b/drivers/hid/hid-debug.c @@ -1082,7 +1082,6 @@ static int hid_debug_events_open(struct inode *inode, struct file *file) goto out; } list->hdev = (struct hid_device *) inode->i_private; - kref_get(&list->hdev->ref); file->private_data = list; mutex_init(&list->read_mutex); @@ -1175,8 +1174,6 @@ static int hid_debug_events_release(struct inode *inode, struct file *file) list_del(&list->node); spin_unlock_irqrestore(&list->hdev->debug_list_lock, flags); kfifo_free(&list->hid_debug_fifo); - - kref_put(&list->hdev->ref, hiddev_free); kfree(list); return 0; diff --git a/include/linux/hid.h b/include/linux/hid.h index 29fb705a27be..7e8a233ad7af 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -624,13 +624,10 @@ struct hid_device { /* device report descriptor */ struct list_head debug_list; spinlock_t debug_list_lock; wait_queue_head_t debug_wait; - struct kref ref; unsigned int id; /* system unique id */ }; -void hiddev_free(struct kref *ref); - #define to_hid_device(pdev) \ container_of(pdev, struct hid_device, dev)