diff mbox

pwm: lp3943: Fix potential memory leak during request

Message ID 20140123223220.7d68b5f6@spike
State Accepted
Headers show

Commit Message

Christian Engelmayer Jan. 23, 2014, 9:32 p.m. UTC
Fix a memory leak in the lp3943_pwm_request_map() error handling path.
Make sure already allocated pwm map memory is freed correctly.
Detected by Coverity: CID 1162829.

Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
---
 drivers/pwm/pwm-lp3943.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Kim, Milo Jan. 23, 2014, 10:47 p.m. UTC | #1
On 01/24/2014 06:32 AM, Christian Engelmayer wrote:
> Fix a memory leak in the lp3943_pwm_request_map() error handling path.
> Make sure already allocated pwm map memory is freed correctly.
> Detected by Coverity: CID 1162829.
>
> Signed-off-by: Christian Engelmayer <cengelma@gmx.at>

Acked-by: Milo Kim <milo.kim@ti.com>

Thanks!
  Milo


--
To unsubscribe from this list: send the line "unsubscribe linux-pwm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Thierry Reding Jan. 24, 2014, 4:23 p.m. UTC | #2
On Thu, Jan 23, 2014 at 10:32:20PM +0100, Christian Engelmayer wrote:
> Fix a memory leak in the lp3943_pwm_request_map() error handling path.
> Make sure already allocated pwm map memory is freed correctly.
> Detected by Coverity: CID 1162829.
> 
> Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
> ---
>  drivers/pwm/pwm-lp3943.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/pwm/pwm-lp3943.c b/drivers/pwm/pwm-lp3943.c
> index 8a843a0..a40b9c3 100644
> --- a/drivers/pwm/pwm-lp3943.c
> +++ b/drivers/pwm/pwm-lp3943.c
> @@ -52,8 +52,10 @@ lp3943_pwm_request_map(struct lp3943_pwm *lp3943_pwm, int hwpwm)
>  		offset = pwm_map->output[i];
>  
>  		/* Return an error if the pin is already assigned */
> -		if (test_and_set_bit(offset, &lp3943->pin_used))
> +		if (test_and_set_bit(offset, &lp3943->pin_used)) {
> +			kfree(pwm_map);
>  			return ERR_PTR(-EBUSY);
> +		}
>  	}
>  
>  	return pwm_map;
> -- 
> 1.8.3.2

Lee, since you took this driver via the MFD tree, would you mind picking
up this fix as well?

In case you don't have it in your inbox somewhere, you should be able to
grab it from here:

	http://patchwork.ozlabs.org/patch/313741/

In that case:

Acked-by: Thierry Reding <thierry.reding@gmail.com>

Thierry
Lee Jones Jan. 27, 2014, 9:58 a.m. UTC | #3
On Fri, 24 Jan 2014, Thierry Reding wrote:

> On Thu, Jan 23, 2014 at 10:32:20PM +0100, Christian Engelmayer wrote:
> > Fix a memory leak in the lp3943_pwm_request_map() error handling path.
> > Make sure already allocated pwm map memory is freed correctly.
> > Detected by Coverity: CID 1162829.
> > 
> > Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
> > ---
> >  drivers/pwm/pwm-lp3943.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/pwm/pwm-lp3943.c b/drivers/pwm/pwm-lp3943.c
> > index 8a843a0..a40b9c3 100644
> > --- a/drivers/pwm/pwm-lp3943.c
> > +++ b/drivers/pwm/pwm-lp3943.c
> > @@ -52,8 +52,10 @@ lp3943_pwm_request_map(struct lp3943_pwm *lp3943_pwm, int hwpwm)
> >  		offset = pwm_map->output[i];
> >  
> >  		/* Return an error if the pin is already assigned */
> > -		if (test_and_set_bit(offset, &lp3943->pin_used))
> > +		if (test_and_set_bit(offset, &lp3943->pin_used)) {
> > +			kfree(pwm_map);
> >  			return ERR_PTR(-EBUSY);
> > +		}
> >  	}
> >  
> >  	return pwm_map;
> 
> Lee, since you took this driver via the MFD tree, would you mind picking
> up this fix as well?

Everything I have is now in Mainline.

It's best for you to apply it now I think?

> In case you don't have it in your inbox somewhere, you should be able to
> grab it from here:
> 
> 	http://patchwork.ozlabs.org/patch/313741/
> 
> In that case:
> 
> Acked-by: Thierry Reding <thierry.reding@gmail.com>
> 
> Thierry
Thierry Reding Jan. 27, 2014, 12:51 p.m. UTC | #4
On Mon, Jan 27, 2014 at 09:58:03AM +0000, Lee Jones wrote:
> On Fri, 24 Jan 2014, Thierry Reding wrote:
> 
> > On Thu, Jan 23, 2014 at 10:32:20PM +0100, Christian Engelmayer wrote:
> > > Fix a memory leak in the lp3943_pwm_request_map() error handling path.
> > > Make sure already allocated pwm map memory is freed correctly.
> > > Detected by Coverity: CID 1162829.
> > > 
> > > Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
> > > ---
> > >  drivers/pwm/pwm-lp3943.c | 4 +++-
> > >  1 file changed, 3 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/pwm/pwm-lp3943.c b/drivers/pwm/pwm-lp3943.c
> > > index 8a843a0..a40b9c3 100644
> > > --- a/drivers/pwm/pwm-lp3943.c
> > > +++ b/drivers/pwm/pwm-lp3943.c
> > > @@ -52,8 +52,10 @@ lp3943_pwm_request_map(struct lp3943_pwm *lp3943_pwm, int hwpwm)
> > >  		offset = pwm_map->output[i];
> > >  
> > >  		/* Return an error if the pin is already assigned */
> > > -		if (test_and_set_bit(offset, &lp3943->pin_used))
> > > +		if (test_and_set_bit(offset, &lp3943->pin_used)) {
> > > +			kfree(pwm_map);
> > >  			return ERR_PTR(-EBUSY);
> > > +		}
> > >  	}
> > >  
> > >  	return pwm_map;
> > 
> > Lee, since you took this driver via the MFD tree, would you mind picking
> > up this fix as well?
> 
> Everything I have is now in Mainline.
> 
> It's best for you to apply it now I think?

Sure, I could do that after -rc1 is released. It's somewhat problematic
because I can't really create a tree that's based on yours before -rc1.
After -rc1 it shouldn't be a problem and this also isn't all that
critical, so sending off another pull request to Linus after -rc1 is
probably what I'll do.

Thierry
Thierry Reding Feb. 26, 2014, 3:09 p.m. UTC | #5
On Thu, Jan 23, 2014 at 10:32:20PM +0100, Christian Engelmayer wrote:
> Fix a memory leak in the lp3943_pwm_request_map() error handling path.
> Make sure already allocated pwm map memory is freed correctly.
> Detected by Coverity: CID 1162829.
> 
> Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
> ---
>  drivers/pwm/pwm-lp3943.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

I've applied this and sent it off to Linus for inclusion in v3.14-rc5.

Thanks,
Thierry
diff mbox

Patch

diff --git a/drivers/pwm/pwm-lp3943.c b/drivers/pwm/pwm-lp3943.c
index 8a843a0..a40b9c3 100644
--- a/drivers/pwm/pwm-lp3943.c
+++ b/drivers/pwm/pwm-lp3943.c
@@ -52,8 +52,10 @@  lp3943_pwm_request_map(struct lp3943_pwm *lp3943_pwm, int hwpwm)
 		offset = pwm_map->output[i];
 
 		/* Return an error if the pin is already assigned */
-		if (test_and_set_bit(offset, &lp3943->pin_used))
+		if (test_and_set_bit(offset, &lp3943->pin_used)) {
+			kfree(pwm_map);
 			return ERR_PTR(-EBUSY);
+		}
 	}
 
 	return pwm_map;