* [PATCH v0] ASoC: rt5645: Fix errorenous cleanup order
@ 2022-05-16 9:20 Lin Ma
2022-05-17 15:59 ` Mark Brown
0 siblings, 1 reply; 2+ messages in thread
From: Lin Ma @ 2022-05-16 9:20 UTC (permalink / raw)
To: oder_chiou, lgirdwood, broonie, perex, tiwai, alsa-devel,
linux-kernel
Cc: Lin Ma
There is a logic error when removing rt5645 device as the function
rt5645_i2c_remove() first cancel the &rt5645->jack_detect_work and
delete the &rt5645->btn_check_timer latter. However, since the timer
handler rt5645_btn_check_callback() will re-queue the jack_detect_work,
this cleanup order is buggy.
That is, once the del_timer_sync in rt5645_i2c_remove is concurrently
run with the rt5645_btn_check_callback, the canceled jack_detect_work
will be rescheduled again, leading to possible use-after-free.
This patch fix the issue by placing the del_timer_sync function before
the cancel_delayed_work_sync.
Signed-off-by: Lin Ma <linma@zju.edu.cn>
---
sound/soc/codecs/rt5645.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 197c56047947..71a8990ba548 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -4154,9 +4154,14 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
if (i2c->irq)
free_irq(i2c->irq, rt5645);
+ /*
+ * Since the rt5645_btn_check_callback() can queue jack_detect_work,
+ * the timer need to be delted first
+ */
+ del_timer_sync(&rt5645->btn_check_timer);
+
cancel_delayed_work_sync(&rt5645->jack_detect_work);
cancel_delayed_work_sync(&rt5645->rcclock_work);
- del_timer_sync(&rt5645->btn_check_timer);
regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
--
2.35.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v0] ASoC: rt5645: Fix errorenous cleanup order
2022-05-16 9:20 [PATCH v0] ASoC: rt5645: Fix errorenous cleanup order Lin Ma
@ 2022-05-17 15:59 ` Mark Brown
0 siblings, 0 replies; 2+ messages in thread
From: Mark Brown @ 2022-05-17 15:59 UTC (permalink / raw)
To: linma, tiwai, oder_chiou, alsa-devel, lgirdwood, perex,
linux-kernel
On Mon, 16 May 2022 17:20:35 +0800, Lin Ma wrote:
> There is a logic error when removing rt5645 device as the function
> rt5645_i2c_remove() first cancel the &rt5645->jack_detect_work and
> delete the &rt5645->btn_check_timer latter. However, since the timer
> handler rt5645_btn_check_callback() will re-queue the jack_detect_work,
> this cleanup order is buggy.
>
> That is, once the del_timer_sync in rt5645_i2c_remove is concurrently
> run with the rt5645_btn_check_callback, the canceled jack_detect_work
> will be rescheduled again, leading to possible use-after-free.
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/1] ASoC: rt5645: Fix errorenous cleanup order
commit: 2def44d3aec59e38d2701c568d65540783f90f2f
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-05-17 16:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-16 9:20 [PATCH v0] ASoC: rt5645: Fix errorenous cleanup order Lin Ma
2022-05-17 15:59 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).