mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
ANDROID: usb: f_accessory: Cancel any pending work before teardown
Tearing down and freeing the 'acc_dev' structure when there is potentially asynchronous work queued involving its member fields is likely to lead to use-after-free issues. Cancel any pending work before freeing the structure. Bug: 173789633 Signed-off-by: Will Deacon <willdeacon@google.com> Change-Id: I68a91274aea18034637b738d558d043ac74fadf4
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f4e1525cde
commit
e7152730c9
@@ -302,6 +302,12 @@ static void __put_acc_dev(struct kref *kref)
|
||||
struct acc_dev_ref *ref = container_of(kref, struct acc_dev_ref, kref);
|
||||
struct acc_dev *dev = ref->acc_dev;
|
||||
|
||||
/* Cancel any async work */
|
||||
cancel_delayed_work_sync(&dev->start_work);
|
||||
cancel_work_sync(&dev->getprotocol_work);
|
||||
cancel_work_sync(&dev->sendstring_work);
|
||||
cancel_work_sync(&dev->hid_work);
|
||||
|
||||
ref->acc_dev = NULL;
|
||||
kfree(dev);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user