Re: [PATCH] ALSA: hda: fix possible memory leak in azx_codec_configure()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 2022/10/24 22:04, Takashi Iwai wrote:
On Mon, 24 Oct 2022 14:26:46 +0200,
Yang Yingliang wrote:
If the codec device is registered, after calling snd_hdac_device_unregister(),
codec has already been removed from chip bus, it should call put_device() to
give up reference to free codec and device name.

Fixes: c0f1886de7e1 ("ALSA: hda: intel: Allow repeatedly probing on codec configuration errors")
Signed-off-by: Yang Yingliang <yangyingliang@xxxxxxxxxx>
Hrm, are you sure that this will result in a memory leak?
put_device() is called at snd_hda_codec_unregister() that is invoked
via dev_free callback of the snd_hda_codec object -- which is called
when the top-level driver is removed.  I'm afraid that your patch will
lead to a double-free.
Thanks for point out.
I look deeper, the snd device is add to device list of card, but snd_hdac_device_unregister() is just remove the codec from chip bus, and the snd device still in device list of card, at last each of snd device is freed in snd_device_free_all() with calling snd_hda_codec_dev_free().

Thanks,
Yang


thanks,

Takashi

---
  sound/pci/hda/hda_controller.c | 3 +++
  1 file changed, 3 insertions(+)

diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c
index 0ff286b7b66b..f6a73ce300a4 100644
--- a/sound/pci/hda/hda_controller.c
+++ b/sound/pci/hda/hda_controller.c
@@ -1257,8 +1257,11 @@ int azx_codec_configure(struct azx *chip)
  		/* unregister failed codecs if any codec has been probed */
  		list_for_each_codec_safe(codec, next, &chip->bus) {
  			if (!codec->configured) {
+				bool is_registered = device_is_registered(&codec->core.dev);
  				codec_err(codec, "Unable to configure, disabling\n");
  				snd_hdac_device_unregister(&codec->core);
+				if (is_registered)
+					put_device(&codec->core.dev);
  			}
  		}
  	}
--
2.25.1

.



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux