All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] nvmem: core: fix leaks on registration errors
@ 2017-05-16 13:44 Johan Hovold
  2017-05-16 21:28 ` Andrey Smirnov
  2017-06-07 14:57 ` Srinivas Kandagatla
  0 siblings, 2 replies; 5+ messages in thread
From: Johan Hovold @ 2017-05-16 13:44 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: linux-kernel, Johan Hovold, stable, Andrew Lunn, Mika Westerberg

Make sure to deregister and release the nvmem device and underlying
memory on registration errors.

Note that the private data must be freed using put_device() once the
struct device has been initialised.

Also note that there's a related reference leak in the deregistration
function as reported by Mika Westerberg which is being fixed separately.

Fixes: b6c217ab9be6 ("nvmem: Add backwards compatibility support for older EEPROM drivers.")
Fixes: eace75cfdcf7 ("nvmem: Add a simple NVMEM framework for nvmem providers")
Cc: stable <stable@vger.kernel.org>     # 4.3
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/nvmem/core.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 8c830a80a648..6cf916d9db6d 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -489,21 +489,24 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
 
 	rval = device_add(&nvmem->dev);
 	if (rval)
-		goto out;
+		goto err_put_device;
 
 	if (config->compat) {
 		rval = nvmem_setup_compat(nvmem, config);
 		if (rval)
-			goto out;
+			goto err_device_del;
 	}
 
 	if (config->cells)
 		nvmem_add_cells(nvmem, config);
 
 	return nvmem;
-out:
-	ida_simple_remove(&nvmem_ida, nvmem->id);
-	kfree(nvmem);
+
+err_device_del:
+	device_del(&nvmem->dev);
+err_put_device:
+	put_device(&nvmem->dev);
+
 	return ERR_PTR(rval);
 }
 EXPORT_SYMBOL_GPL(nvmem_register);
-- 
2.13.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] nvmem: core: fix leaks on registration errors
  2017-05-16 13:44 [PATCH] nvmem: core: fix leaks on registration errors Johan Hovold
@ 2017-05-16 21:28 ` Andrey Smirnov
  2017-05-17  8:51   ` Johan Hovold
  2017-06-07 14:57 ` Srinivas Kandagatla
  1 sibling, 1 reply; 5+ messages in thread
From: Andrey Smirnov @ 2017-05-16 21:28 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Srinivas Kandagatla, linux-kernel, stable, Andrew Lunn, Mika Westerberg

On Tue, May 16, 2017 at 6:44 AM, Johan Hovold <johan@kernel.org> wrote:
> Make sure to deregister and release the nvmem device and underlying
> memory on registration errors.
>
> Note that the private data must be freed using put_device() once the
> struct device has been initialised.
>
> Also note that there's a related reference leak in the deregistration
> function as reported by Mika Westerberg which is being fixed separately.
>
> Fixes: b6c217ab9be6 ("nvmem: Add backwards compatibility support for older EEPROM drivers.")
> Fixes: eace75cfdcf7 ("nvmem: Add a simple NVMEM framework for nvmem providers")
> Cc: stable <stable@vger.kernel.org>     # 4.3
> Cc: Andrew Lunn <andrew@lunn.ch>
> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---

I submitted identical patch to fix this about a month ago here:

lkml.kernel.org/r/20170418142454.23921-1-andrew.smirnov@gmail.com

so, FWIW,

Acked-by: Andrey Smirnov <andrew.smirnov@gmail.com>

>  drivers/nvmem/core.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
> index 8c830a80a648..6cf916d9db6d 100644
> --- a/drivers/nvmem/core.c
> +++ b/drivers/nvmem/core.c
> @@ -489,21 +489,24 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
>
>         rval = device_add(&nvmem->dev);
>         if (rval)
> -               goto out;
> +               goto err_put_device;
>
>         if (config->compat) {
>                 rval = nvmem_setup_compat(nvmem, config);
>                 if (rval)
> -                       goto out;
> +                       goto err_device_del;
>         }
>
>         if (config->cells)
>                 nvmem_add_cells(nvmem, config);
>
>         return nvmem;
> -out:
> -       ida_simple_remove(&nvmem_ida, nvmem->id);
> -       kfree(nvmem);
> +
> +err_device_del:
> +       device_del(&nvmem->dev);
> +err_put_device:
> +       put_device(&nvmem->dev);
> +
>         return ERR_PTR(rval);
>  }
>  EXPORT_SYMBOL_GPL(nvmem_register);
> --
> 2.13.0
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] nvmem: core: fix leaks on registration errors
  2017-05-16 21:28 ` Andrey Smirnov
@ 2017-05-17  8:51   ` Johan Hovold
  2017-05-17 13:06     ` Andrey Smirnov
  0 siblings, 1 reply; 5+ messages in thread
From: Johan Hovold @ 2017-05-17  8:51 UTC (permalink / raw)
  To: Andrey Smirnov
  Cc: Johan Hovold, Srinivas Kandagatla, linux-kernel, stable,
	Andrew Lunn, Mika Westerberg

On Tue, May 16, 2017 at 02:28:28PM -0700, Andrey Smirnov wrote:
> On Tue, May 16, 2017 at 6:44 AM, Johan Hovold <johan@kernel.org> wrote:
> > Make sure to deregister and release the nvmem device and underlying
> > memory on registration errors.
> >
> > Note that the private data must be freed using put_device() once the
> > struct device has been initialised.
> >
> > Also note that there's a related reference leak in the deregistration
> > function as reported by Mika Westerberg which is being fixed separately.
> >
> > Fixes: b6c217ab9be6 ("nvmem: Add backwards compatibility support for older EEPROM drivers.")
> > Fixes: eace75cfdcf7 ("nvmem: Add a simple NVMEM framework for nvmem providers")
> > Cc: stable <stable@vger.kernel.org>     # 4.3
> > Cc: Andrew Lunn <andrew@lunn.ch>
> > Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> > Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> > ---
> 
> I submitted identical patch to fix this about a month ago here:
> 
> lkml.kernel.org/r/20170418142454.23921-1-andrew.smirnov@gmail.com

Oh, and you fixed up both the registration and deregistration leaks in
your series too. Looks like the maintainer is on vacation now so perhaps
we'll see a third independent fix for these bugs soon. ;) 

As for your series, I prefer this version for nvmem_register due to the
difference in error label naming (named after what they do rather than
where they are used), but as I also mentioned to Mika, I think just
adding the missing put_device to nvmem_unregister as you did is
preferred.

But the important thing is that this gets fixed.

> so, FWIW,
> 
> Acked-by: Andrey Smirnov <andrew.smirnov@gmail.com>

Thanks,
Johan

> >  drivers/nvmem/core.c | 13 ++++++++-----
> >  1 file changed, 8 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
> > index 8c830a80a648..6cf916d9db6d 100644
> > --- a/drivers/nvmem/core.c
> > +++ b/drivers/nvmem/core.c
> > @@ -489,21 +489,24 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
> >
> >         rval = device_add(&nvmem->dev);
> >         if (rval)
> > -               goto out;
> > +               goto err_put_device;
> >
> >         if (config->compat) {
> >                 rval = nvmem_setup_compat(nvmem, config);
> >                 if (rval)
> > -                       goto out;
> > +                       goto err_device_del;
> >         }
> >
> >         if (config->cells)
> >                 nvmem_add_cells(nvmem, config);
> >
> >         return nvmem;
> > -out:
> > -       ida_simple_remove(&nvmem_ida, nvmem->id);
> > -       kfree(nvmem);
> > +
> > +err_device_del:
> > +       device_del(&nvmem->dev);
> > +err_put_device:
> > +       put_device(&nvmem->dev);
> > +
> >         return ERR_PTR(rval);
> >  }
> >  EXPORT_SYMBOL_GPL(nvmem_register);
> > --
> > 2.13.0
> >

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] nvmem: core: fix leaks on registration errors
  2017-05-17  8:51   ` Johan Hovold
@ 2017-05-17 13:06     ` Andrey Smirnov
  0 siblings, 0 replies; 5+ messages in thread
From: Andrey Smirnov @ 2017-05-17 13:06 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Srinivas Kandagatla, linux-kernel, stable, Andrew Lunn, Mika Westerberg

On Wed, May 17, 2017 at 1:51 AM, Johan Hovold <johan@kernel.org> wrote:
> On Tue, May 16, 2017 at 02:28:28PM -0700, Andrey Smirnov wrote:
>> On Tue, May 16, 2017 at 6:44 AM, Johan Hovold <johan@kernel.org> wrote:
>> > Make sure to deregister and release the nvmem device and underlying
>> > memory on registration errors.
>> >
>> > Note that the private data must be freed using put_device() once the
>> > struct device has been initialised.
>> >
>> > Also note that there's a related reference leak in the deregistration
>> > function as reported by Mika Westerberg which is being fixed separately.
>> >
>> > Fixes: b6c217ab9be6 ("nvmem: Add backwards compatibility support for older EEPROM drivers.")
>> > Fixes: eace75cfdcf7 ("nvmem: Add a simple NVMEM framework for nvmem providers")
>> > Cc: stable <stable@vger.kernel.org>     # 4.3
>> > Cc: Andrew Lunn <andrew@lunn.ch>
>> > Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> > Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
>> > Signed-off-by: Johan Hovold <johan@kernel.org>
>> > ---
>>
>> I submitted identical patch to fix this about a month ago here:
>>
>> lkml.kernel.org/r/20170418142454.23921-1-andrew.smirnov@gmail.com
>
> Oh, and you fixed up both the registration and deregistration leaks in
> your series too. Looks like the maintainer is on vacation now so perhaps
> we'll see a third independent fix for these bugs soon. ;)
>

Heh, let's hope not :-)

> As for your series, I prefer this version for nvmem_register due to the
> difference in error label naming (named after what they do rather than
> where they are used), but as I also mentioned to Mika, I think just
> adding the missing put_device to nvmem_unregister as you did is
> preferred.
>
> But the important thing is that this gets fixed.
>

Yup, agreed, as long a version of both fixes ends up being applied
it's all good.

Thanks,
Andrey

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] nvmem: core: fix leaks on registration errors
  2017-05-16 13:44 [PATCH] nvmem: core: fix leaks on registration errors Johan Hovold
  2017-05-16 21:28 ` Andrey Smirnov
@ 2017-06-07 14:57 ` Srinivas Kandagatla
  1 sibling, 0 replies; 5+ messages in thread
From: Srinivas Kandagatla @ 2017-06-07 14:57 UTC (permalink / raw)
  To: Johan Hovold; +Cc: linux-kernel, stable, Andrew Lunn, Mika Westerberg



On 16/05/17 14:44, Johan Hovold wrote:
> Make sure to deregister and release the nvmem device and underlying
> memory on registration errors.
>
> Note that the private data must be freed using put_device() once the
> struct device has been initialised.
>
> Also note that there's a related reference leak in the deregistration
> function as reported by Mika Westerberg which is being fixed separately.
>
> Fixes: b6c217ab9be6 ("nvmem: Add backwards compatibility support for older EEPROM drivers.")
> Fixes: eace75cfdcf7 ("nvmem: Add a simple NVMEM framework for nvmem providers")
> Cc: stable <stable@vger.kernel.org>     # 4.3
> Cc: Andrew Lunn <andrew@lunn.ch>
> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
>  drivers/nvmem/core.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)

Thanks for the patch,
Will queue this one along with the "[PATCH 2/2] nvmem: core: Call 
put_device() in nvmem_unregister()" patch from Andrey Smirnov


thanks
srini
>
> diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
> index 8c830a80a648..6cf916d9db6d 100644
> --- a/drivers/nvmem/core.c
> +++ b/drivers/nvmem/core.c
> @@ -489,21 +489,24 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
>
>  	rval = device_add(&nvmem->dev);
>  	if (rval)
> -		goto out;
> +		goto err_put_device;
>
>  	if (config->compat) {
>  		rval = nvmem_setup_compat(nvmem, config);
>  		if (rval)
> -			goto out;
> +			goto err_device_del;
>  	}
>
>  	if (config->cells)
>  		nvmem_add_cells(nvmem, config);
>
>  	return nvmem;
> -out:
> -	ida_simple_remove(&nvmem_ida, nvmem->id);
> -	kfree(nvmem);
> +
> +err_device_del:
> +	device_del(&nvmem->dev);
> +err_put_device:
> +	put_device(&nvmem->dev);
> +
>  	return ERR_PTR(rval);
>  }
>  EXPORT_SYMBOL_GPL(nvmem_register);
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-06-07 14:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-16 13:44 [PATCH] nvmem: core: fix leaks on registration errors Johan Hovold
2017-05-16 21:28 ` Andrey Smirnov
2017-05-17  8:51   ` Johan Hovold
2017-05-17 13:06     ` Andrey Smirnov
2017-06-07 14:57 ` Srinivas Kandagatla

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.