mirror of https://github.com/torvalds/linux.git
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: bfc653aa89 ("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…
Reference in New Issue