mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
ASoC: sof_es8336: fix possible use-after-free in sof_es8336_remove()
[ Upstream commit1b41beaa7a] sof_es8336_remove() calls cancel_delayed_work(). However, that function does not wait until the work function finishes. This means that the callback function may still be running after the driver's remove function has finished, which would result in a use-after-free. Fix by calling cancel_delayed_work_sync(), which ensures that the work is properly cancelled, no longer running, and unable to re-schedule itself. Fixes:89cdb224f2("ASoC: sof_es8336: reduce pop noise on speaker") Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20221205143721.3988988-1-yangyingliang@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
48c509f3f1
commit
390a1a9828
|
|
@ -783,7 +783,7 @@ static int sof_es8336_remove(struct platform_device *pdev)
|
|||
struct snd_soc_card *card = platform_get_drvdata(pdev);
|
||||
struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card);
|
||||
|
||||
cancel_delayed_work(&priv->pcm_pop_work);
|
||||
cancel_delayed_work_sync(&priv->pcm_pop_work);
|
||||
gpiod_put(priv->gpio_speakers);
|
||||
device_remove_software_node(priv->codec_dev);
|
||||
put_device(priv->codec_dev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user