All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] staging: ks7010_sdio: fix NULL pointer dereference and memory leak
@ 2018-04-12 14:30 Gustavo A. R. Silva
  2018-04-12 15:08 ` Dan Carpenter
  0 siblings, 1 reply; 3+ messages in thread
From: Gustavo A. R. Silva @ 2018-04-12 14:30 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: devel, linux-kernel, Gustavo A. R. Silva

priv is being dereferenced when it is still null, hence there is an
explicit null pointer dereference at line 935: free_netdev(priv->net_dev)

Also, memory allocated for netdev at line 854:
netdev = alloc_etherdev(sizeof(*priv));
is not being free'd, hence there is a memory leak.

Fix this by null checking priv before dererefencing it and free netdev
before return.

Addresses-Coverity-ID: 1467844 ("Explicit null dereferenced")
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
---
 drivers/staging/ks7010/ks7010_sdio.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/ks7010/ks7010_sdio.c b/drivers/staging/ks7010/ks7010_sdio.c
index b8f55a1..f5d4c62 100644
--- a/drivers/staging/ks7010/ks7010_sdio.c
+++ b/drivers/staging/ks7010/ks7010_sdio.c
@@ -932,8 +932,12 @@ static int ks7010_sdio_probe(struct sdio_func *func,
 	return 0;
 
  err_free_netdev:
-	free_netdev(priv->net_dev);
-	card->priv = NULL;
+	if (priv) {
+		free_netdev(priv->net_dev);
+		card->priv = NULL;
+	} else {
+		free_netdev(netdev);
+	}
  err_release_irq:
 	sdio_claim_host(func);
 	sdio_release_irq(func);
-- 
2.7.4

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

* Re: [PATCH] staging: ks7010_sdio: fix NULL pointer dereference and memory leak
  2018-04-12 14:30 [PATCH] staging: ks7010_sdio: fix NULL pointer dereference and memory leak Gustavo A. R. Silva
@ 2018-04-12 15:08 ` Dan Carpenter
  2018-04-12 15:14   ` Gustavo A. R. Silva
  0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2018-04-12 15:08 UTC (permalink / raw)
  To: Gustavo A. R. Silva, Colin King; +Cc: devel, Greg Kroah-Hartman, linux-kernel

I added Colin to the Cc list.

On Thu, Apr 12, 2018 at 09:30:09AM -0500, Gustavo A. R. Silva wrote:
> priv is being dereferenced when it is still null, hence there is an
> explicit null pointer dereference at line 935: free_netdev(priv->net_dev)
> 
> Also, memory allocated for netdev at line 854:
> netdev = alloc_etherdev(sizeof(*priv));
> is not being free'd, hence there is a memory leak.
> 
> Fix this by null checking priv before dererefencing it and free netdev
> before return.
> 
> Addresses-Coverity-ID: 1467844 ("Explicit null dereferenced")
> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
> ---
>  drivers/staging/ks7010/ks7010_sdio.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/ks7010/ks7010_sdio.c b/drivers/staging/ks7010/ks7010_sdio.c
> index b8f55a1..f5d4c62 100644
> --- a/drivers/staging/ks7010/ks7010_sdio.c
> +++ b/drivers/staging/ks7010/ks7010_sdio.c
> @@ -932,8 +932,12 @@ static int ks7010_sdio_probe(struct sdio_func *func,
>  	return 0;
>  
>   err_free_netdev:
> -	free_netdev(priv->net_dev);
> -	card->priv = NULL;
> +	if (priv) {
> +		free_netdev(priv->net_dev);
> +		card->priv = NULL;

This isn't required because the next thing we do to card is kfree(card).

> +	} else {
> +		free_netdev(netdev);
> +	}


That's too complicated.  Just do:

err_free_netdev:
	free_netdev(net_dev);

err_release_irq:
	...

Please send a v2 patch.

regards,
dan carpenter


_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* Re: [PATCH] staging: ks7010_sdio: fix NULL pointer dereference and memory leak
  2018-04-12 15:08 ` Dan Carpenter
@ 2018-04-12 15:14   ` Gustavo A. R. Silva
  0 siblings, 0 replies; 3+ messages in thread
From: Gustavo A. R. Silva @ 2018-04-12 15:14 UTC (permalink / raw)
  To: Dan Carpenter, Colin King; +Cc: Greg Kroah-Hartman, devel, linux-kernel

Hi Dan,

On 04/12/2018 10:08 AM, Dan Carpenter wrote:
> I added Colin to the Cc list.
> 
> On Thu, Apr 12, 2018 at 09:30:09AM -0500, Gustavo A. R. Silva wrote:
>> priv is being dereferenced when it is still null, hence there is an
>> explicit null pointer dereference at line 935: free_netdev(priv->net_dev)
>>
>> Also, memory allocated for netdev at line 854:
>> netdev = alloc_etherdev(sizeof(*priv));
>> is not being free'd, hence there is a memory leak.
>>
>> Fix this by null checking priv before dererefencing it and free netdev
>> before return.
>>
>> Addresses-Coverity-ID: 1467844 ("Explicit null dereferenced")
>> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
>> ---
>>   drivers/staging/ks7010/ks7010_sdio.c | 8 ++++++--
>>   1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/staging/ks7010/ks7010_sdio.c b/drivers/staging/ks7010/ks7010_sdio.c
>> index b8f55a1..f5d4c62 100644
>> --- a/drivers/staging/ks7010/ks7010_sdio.c
>> +++ b/drivers/staging/ks7010/ks7010_sdio.c
>> @@ -932,8 +932,12 @@ static int ks7010_sdio_probe(struct sdio_func *func,
>>   	return 0;
>>   
>>    err_free_netdev:
>> -	free_netdev(priv->net_dev);
>> -	card->priv = NULL;
>> +	if (priv) {
>> +		free_netdev(priv->net_dev);
>> +		card->priv = NULL;
> 
> This isn't required because the next thing we do to card is kfree(card).
> 

I got it.

>> +	} else {
>> +		free_netdev(netdev);
>> +	}
> 
> 
> That's too complicated.  Just do:
> 
> err_free_netdev:
> 	free_netdev(net_dev);
> 
> err_release_irq:
> 	...
> 
> Please send a v2 patch.
> 

Sure thing, I'll send it shortly.

Thanks for the feedback.
--
Gustavo

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

end of thread, other threads:[~2018-04-12 15:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-12 14:30 [PATCH] staging: ks7010_sdio: fix NULL pointer dereference and memory leak Gustavo A. R. Silva
2018-04-12 15:08 ` Dan Carpenter
2018-04-12 15:14   ` Gustavo A. R. Silva

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.