mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
perf: arm_cspmu: fix error handling in arm_cspmu_impl_unregister()
driver_find_device() calls get_device() to increment the reference count once a matching device is found. device_release_driver() releases the driver, but it does not decrease the reference count that was incremented by driver_find_device(). At the end of the loop, there is no put_device() to balance the reference count. To avoid reference count leakage, add put_device() to decrease the reference count. Found by code review. Cc: stable@vger.kernel.org Fixes: bfc653aa89cb ("perf: arm_cspmu: Separate Arm and vendor module") Signed-off-by: Ma Ke <make24@iscas.ac.cn> Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
8fa08f8835
commit
970e1e4180
@ -1407,8 +1407,10 @@ void arm_cspmu_impl_unregister(const struct arm_cspmu_impl_match *impl_match)
|
||||
|
||||
/* Unbind the driver from all matching backend devices. */
|
||||
while ((dev = driver_find_device(&arm_cspmu_driver.driver, NULL,
|
||||
match, arm_cspmu_match_device)))
|
||||
match, arm_cspmu_match_device))) {
|
||||
device_release_driver(dev);
|
||||
put_device(dev);
|
||||
}
|
||||
|
||||
mutex_lock(&arm_cspmu_lock);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user