diff mbox

ALSA: hda - Fix memory leak on snd_hdac_device_init error

Message ID 20171109032751.20573-1-guneshwor.o.singh@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Guneshwor Singh Nov. 9, 2017, 3:27 a.m. UTC
From: "Subhransu S. Prusty" <subhransu.s.prusty@intel.com>

Free codec vendor name on snd_hdac_device_init error.

Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com>
---
 sound/hda/hdac_device.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Vinod Koul Nov. 9, 2017, 4:44 a.m. UTC | #1
On Thu, Nov 09, 2017 at 08:57:51AM +0530, Guneshwor Singh wrote:
> From: "Subhransu S. Prusty" <subhransu.s.prusty@intel.com>
> 
> Free codec vendor name on snd_hdac_device_init error.
> 
> Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
> Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com>
> ---
>  sound/hda/hdac_device.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
> index 19deb306facb..467b949544e2 100644
> --- a/sound/hda/hdac_device.c
> +++ b/sound/hda/hdac_device.c
> @@ -111,6 +111,8 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
>  	return 0;
>  
>   error:
> +	kfree(codec->vendor_name);

Sorry I dont think this is right.

The vendor name is freed in the snd_hdac_device_exit()

We drop the reference here and release method would be called to
free up the resources.

>  	put_device(&codec->dev);
>  	return err;
>  }
> -- 
> 2.15.0
>
Takashi Iwai Nov. 9, 2017, 7:31 a.m. UTC | #2
On Thu, 09 Nov 2017 05:44:19 +0100,
Vinod Koul wrote:
> 
> On Thu, Nov 09, 2017 at 08:57:51AM +0530, Guneshwor Singh wrote:
> > From: "Subhransu S. Prusty" <subhransu.s.prusty@intel.com>
> > 
> > Free codec vendor name on snd_hdac_device_init error.
> > 
> > Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
> > Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com>
> > ---
> >  sound/hda/hdac_device.c | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
> > index 19deb306facb..467b949544e2 100644
> > --- a/sound/hda/hdac_device.c
> > +++ b/sound/hda/hdac_device.c
> > @@ -111,6 +111,8 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
> >  	return 0;
> >  
> >   error:
> > +	kfree(codec->vendor_name);
> 
> Sorry I dont think this is right.
> 
> The vendor name is freed in the snd_hdac_device_exit()
> 
> We drop the reference here and release method would be called to
> free up the resources.

Correct.  The patch would lead to a double-free.


thanks,

Takashi


> 
> >  	put_device(&codec->dev);
> >  	return err;
> >  }
> > -- 
> > 2.15.0
> > 
> 
> -- 
> ~Vinod
>
Guneshwor Singh Nov. 9, 2017, 11:29 a.m. UTC | #3
On Thu, Nov 09, 2017 at 08:31:56AM +0100, Takashi Iwai wrote:
> On Thu, 09 Nov 2017 05:44:19 +0100,
> Vinod Koul wrote:
> > 
> > On Thu, Nov 09, 2017 at 08:57:51AM +0530, Guneshwor Singh wrote:
> > > From: "Subhransu S. Prusty" <subhransu.s.prusty@intel.com>
> > > 
> > > Free codec vendor name on snd_hdac_device_init error.
> > > 
> > > Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
> > > Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com>
> > > ---
> > >  sound/hda/hdac_device.c | 2 ++
> > >  1 file changed, 2 insertions(+)
> > > 
> > > diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
> > > index 19deb306facb..467b949544e2 100644
> > > --- a/sound/hda/hdac_device.c
> > > +++ b/sound/hda/hdac_device.c
> > > @@ -111,6 +111,8 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
> > >  	return 0;
> > >  
> > >   error:
> > > +	kfree(codec->vendor_name);
> > 
> > Sorry I dont think this is right.
> > 
> > The vendor name is freed in the snd_hdac_device_exit()
> > 
> > We drop the reference here and release method would be called to
> > free up the resources.
> 
> Correct.  The patch would lead to a double-free.
> 
> 

Yes, you are right. Please ignore the patch.

> thanks,
> 
> Takashi
> 
> 
> > 
> > >  	put_device(&codec->dev);
> > >  	return err;
> > >  }
> > > -- 
> > > 2.15.0
> > > 
> > 
> > -- 
> > ~Vinod
> >
diff mbox

Patch

diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
index 19deb306facb..467b949544e2 100644
--- a/sound/hda/hdac_device.c
+++ b/sound/hda/hdac_device.c
@@ -111,6 +111,8 @@  int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
 	return 0;
 
  error:
+	kfree(codec->vendor_name);
+
 	put_device(&codec->dev);
 	return err;
 }