ALSA: hda/cs_dsp_ctl: Use private_free for control cleanup
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Wed, 8 May 2024 09:56:27 +0000 (10:56 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 8 May 2024 16:18:18 +0000 (18:18 +0200)
commit172811e3a557d8681a5e2d0f871dc04a2d17eb13
tree920963712304bd63c60d342e01976edb4bc2bf52
parentb7df4cc3a088a8ce6973c96731bc792dbf54ce28
ALSA: hda/cs_dsp_ctl: Use private_free for control cleanup

Use the control private_free callback to free the associated data
block. This ensures that the memory won't leak, whatever way the
control gets destroyed.

The original implementation didn't actually remove the ALSA
controls in hda_cs_dsp_control_remove(). It only freed the internal
tracking structure. This meant it was possible to remove/unload the
amp driver while leaving its ALSA controls still present in the
soundcard. Obviously attempting to access them could cause segfaults
or at least dereferencing stale pointers.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Fixes: 3233b978af23 ("ALSA: hda: hda_cs_dsp_ctl: Add Library to support CS_DSP ALSA controls")
Link: https://lore.kernel.org/r/20240508095627.44476-1-rf@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_cs_dsp_ctl.c