ASoC: sof_es8336: fix possible use-after-free in sof_es8336_remove()
authorYang Yingliang <yangyingliang@huawei.com>
Mon, 5 Dec 2022 14:37:21 +0000 (22:37 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:33:06 +0000 (13:33 +0100)
commit390a1a98288a53b2e7555097d83c6e55d579b166
tree6035136344b73d040a8a2999abd354e23703b38d
parent48c509f3f1210d3a2011e7fd4bae6dfc781c5243
ASoC: sof_es8336: fix possible use-after-free in sof_es8336_remove()

[ Upstream commit 1b41beaa7a58467505ec3023af8aad74f878b888 ]

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: 89cdb224f2ab ("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>
sound/soc/intel/boards/sof_es8336.c