On March 25, 2015 2:11:48 AM EDT, Larry Finger <[email protected]> wrote: >On 03/24/2015 11:24 PM, Nicholas Krause wrote: >> Fixes memory leaks in the function,sa11xx_drv_pcmcia_probe for >> when either clk_get returns a error value or when we cannot allocate >> memory with the pointer sinfo to memory required for this function >> to continue and return successfully. Further more this was caught by >> running coccinelle on the lastet kernel tree. >> >> Signed-off-by: Nicholas Krause <[email protected]> >> --- >> drivers/pcmcia/sa11xx_base.c | 9 +++++++-- >> 1 file changed, 7 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/pcmcia/sa11xx_base.c >b/drivers/pcmcia/sa11xx_base.c >> index cf6de2c..a95ce73 100644 >> --- a/drivers/pcmcia/sa11xx_base.c >> +++ b/drivers/pcmcia/sa11xx_base.c >> @@ -223,14 +223,19 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, >struct pcmcia_low_level *ops, >> struct clk *clk; >> >> clk = clk_get(dev, NULL); >> - if (IS_ERR(clk)) >> + if (IS_ERR(clk)) { >> + clk_put(clk); >> return PTR_ERR(clk); >> + } > >If the clk_get() failed, then there is no need to use a clk_put(). In >addition, >clk contains an error code, not a valid pointer. This change would >crash the >system every time clk_get() failed. > >> >> sa11xx_drv_pcmcia_ops(ops); >> >> sinfo = kzalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL); >> - if (!sinfo) >> + if (!sinfo) { >> + clk_put(clk); >> + kfree(sinfo); >> return -ENOMEM; > >If the memory allocation failed, there is nothing to free. That kfree() >call is >not needed; however, the clk_put() is needed here. > >NACK. > >Larry > > >> + } >> >> sinfo->nskt = nr; >> sinfo->clk = clk; >> Larry, Your absolutely right here. I will send in a v2 with these issues fixed and solved. Thanks your time, Nick
-- Sent from my Android device with K-9 Mail. Please excuse my brevity. _______________________________________________ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
