mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
ASoC: sdw_utils: fix double put_device() on aggregated amps
In aggregation mode with two identical amplifiers, a stress test that repeatedly triggers card unbind/rebind can hit a NULL pointer dereference during the exit path. ctx->amp_dev1 / ctx->amp_dev2 are single shared resources, so the release must be safe against being called more than once. Clear each pointer after put_device() so a second invocation becomes a no-op, this could address NULL pointer dereference issue. Signed-off-by: Jack Yu <jack.yu@realtek.com> Link: https://patch.msgid.link/20260818023018.2564212-1-jack.yu@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
dd0ae9a2e1
commit
046173b98d
|
|
@ -252,11 +252,13 @@ int asoc_sdw_rt_amp_exit(struct snd_soc_card *card, struct snd_soc_dai_link *dai
|
|||
if (ctx->amp_dev1) {
|
||||
device_remove_software_node(ctx->amp_dev1);
|
||||
put_device(ctx->amp_dev1);
|
||||
ctx->amp_dev1 = NULL;
|
||||
}
|
||||
|
||||
if (ctx->amp_dev2) {
|
||||
device_remove_software_node(ctx->amp_dev2);
|
||||
put_device(ctx->amp_dev2);
|
||||
ctx->amp_dev2 = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user