Message ID | 20221022025804.1221953-1-yangyingliang@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ASoC: Intel: avs: fix possible memory leak in probe_codec() | expand |
+Cc: Takashi Iwai <tiwai@suse.de> Hi, is this patch good? Thanks, Yang On 2022/10/22 10:58, Yang Yingliang wrote: > If snd_hda_codec_configure() fails, 'codec' and name allocated in > dev_set_name() called in snd_hdac_device_init() are leaked. Fix this > by calling snd_hdac_device_unregister() and put_device(), so they > can be freed in snd_hda_codec_dev_release() and kobject_cleanup(). > > Fixes: 1affc44ea5dd ("ASoC: Intel: avs: PCI driver implementation") > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> > --- > sound/soc/intel/avs/core.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/sound/soc/intel/avs/core.c b/sound/soc/intel/avs/core.c > index bb0719c58ca4..2fde2b3f8790 100644 > --- a/sound/soc/intel/avs/core.c > +++ b/sound/soc/intel/avs/core.c > @@ -140,6 +140,8 @@ static int probe_codec(struct hdac_bus *bus, int addr) > ret = snd_hda_codec_configure(codec); > if (ret < 0) { > dev_err(bus->dev, "failed to config codec %d\n", ret); > + snd_hdac_device_unregister(&codec->core); > + put_device(&codec->core.dev); > return ret; > } >
On Wed, 02 Nov 2022 02:48:30 +0100, Yang Yingliang wrote: > > +Cc: Takashi Iwai <tiwai@suse.de> > > Hi, is this patch good? Not really. The codec instances are freed later at avs_pci_remove(). Takashi > > Thanks, > Yang > On 2022/10/22 10:58, Yang Yingliang wrote: > > If snd_hda_codec_configure() fails, 'codec' and name allocated in > > dev_set_name() called in snd_hdac_device_init() are leaked. Fix this > > by calling snd_hdac_device_unregister() and put_device(), so they > > can be freed in snd_hda_codec_dev_release() and kobject_cleanup(). > > > > Fixes: 1affc44ea5dd ("ASoC: Intel: avs: PCI driver implementation") > > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> > > --- > > sound/soc/intel/avs/core.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/sound/soc/intel/avs/core.c b/sound/soc/intel/avs/core.c > > index bb0719c58ca4..2fde2b3f8790 100644 > > --- a/sound/soc/intel/avs/core.c > > +++ b/sound/soc/intel/avs/core.c > > @@ -140,6 +140,8 @@ static int probe_codec(struct hdac_bus *bus, int addr) > > ret = snd_hda_codec_configure(codec); > > if (ret < 0) { > > dev_err(bus->dev, "failed to config codec %d\n", ret); > > + snd_hdac_device_unregister(&codec->core); > > + put_device(&codec->core.dev); > > return ret; > > } > > >
diff --git a/sound/soc/intel/avs/core.c b/sound/soc/intel/avs/core.c index bb0719c58ca4..2fde2b3f8790 100644 --- a/sound/soc/intel/avs/core.c +++ b/sound/soc/intel/avs/core.c @@ -140,6 +140,8 @@ static int probe_codec(struct hdac_bus *bus, int addr) ret = snd_hda_codec_configure(codec); if (ret < 0) { dev_err(bus->dev, "failed to config codec %d\n", ret); + snd_hdac_device_unregister(&codec->core); + put_device(&codec->core.dev); return ret; }
If snd_hda_codec_configure() fails, 'codec' and name allocated in dev_set_name() called in snd_hdac_device_init() are leaked. Fix this by calling snd_hdac_device_unregister() and put_device(), so they can be freed in snd_hda_codec_dev_release() and kobject_cleanup(). Fixes: 1affc44ea5dd ("ASoC: Intel: avs: PCI driver implementation") Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- sound/soc/intel/avs/core.c | 2 ++ 1 file changed, 2 insertions(+)