Skip to content

Commit

Permalink
ASoC: codecs: wcd938x-sdw: fix use after free on driver unbind
Browse files Browse the repository at this point in the history
Make sure to deregister the component when the driver is being unbound
and before the underlying device-managed resources are freed.

Fixes: 1657252 ("ASoC: codecs: wcd938x-sdw: add SoundWire driver")
Cc: stable@vger.kernel.org      # 5.14
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20231003155558.27079-7-johan+linaro@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Johan Hovold authored and Mark Brown committed Oct 9, 2023
1 parent 3ebebb2 commit f0dfdcb
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions sound/soc/codecs/wcd938x-sdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -1281,6 +1281,15 @@ static int wcd9380_probe(struct sdw_slave *pdev,
return component_add(dev, &wcd938x_sdw_component_ops);
}

static int wcd9380_remove(struct sdw_slave *pdev)
{
struct device *dev = &pdev->dev;

component_del(dev, &wcd938x_sdw_component_ops);

return 0;
}

static const struct sdw_device_id wcd9380_slave_id[] = {
SDW_SLAVE_ENTRY(0x0217, 0x10d, 0),
{},
Expand Down Expand Up @@ -1320,6 +1329,7 @@ static const struct dev_pm_ops wcd938x_sdw_pm_ops = {

static struct sdw_driver wcd9380_codec_driver = {
.probe = wcd9380_probe,
.remove = wcd9380_remove,
.ops = &wcd9380_slave_ops,
.id_table = wcd9380_slave_id,
.driver = {
Expand Down

0 comments on commit f0dfdcb

Please sign in to comment.