msm: thermal: Clean up KTM progressive mitigation exit path
If userspace request to disable progressive mitigation, it removes threshold settings and clear device mitigation, but it keeps progressive config list. But request to disable comes more than once from userspace, it retries above clean up which may leads to crash due to use after free. Clean up KTM progressive mitigation exit properly. Change-Id: I2083411361c943612293a403e5f4c6a7cd31e281 Signed-off-by: Manaf Meethalavalappu Pallikunhi <manafm@codeaurora.org>
This commit is contained in:
parent
abe105f868
commit
b4ea5dcfb9
|
@ -4894,9 +4894,10 @@ static int __ref set_enabled(const char *val, const struct kernel_param *kp)
|
|||
|
||||
ret = param_set_bool(val, kp);
|
||||
if (!enabled) {
|
||||
if (ktm_prog_thresh_enabled)
|
||||
if (ktm_prog_thresh_enabled) {
|
||||
ktm_progressive_exit();
|
||||
disable_msm_thermal();
|
||||
ktm_prog_thresh_enabled = false;
|
||||
}
|
||||
interrupt_mode_init();
|
||||
} else {
|
||||
pr_info("no action for enabled = %d\n",
|
||||
|
@ -7488,14 +7489,16 @@ static int msm_thermal_dev_exit(struct platform_device *inp_dev)
|
|||
|
||||
if (ktm_prog_thresh_enabled) {
|
||||
ktm_progressive_exit();
|
||||
list_for_each_entry_safe(prog, next_prog,
|
||||
&prog_rules_list, list_ptr) {
|
||||
list_del(&prog->list_ptr);
|
||||
devm_kfree(&inp_dev->dev, prog);
|
||||
prog = NULL;
|
||||
}
|
||||
ktm_prog_thresh_enabled = false;
|
||||
}
|
||||
list_for_each_entry_safe(prog, next_prog,
|
||||
&prog_rules_list, list_ptr) {
|
||||
devmgr_unregister_mitigation_client(
|
||||
&inp_dev->dev, prog->handle);
|
||||
list_del(&prog->list_ptr);
|
||||
devm_kfree(&inp_dev->dev, prog);
|
||||
prog = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue