staging: ks7010_sdio: fix NULL pointer dereference and memory leak
PATCH 1/1 staging: ks7010_sdio: fix NULL pointer dereference and memory leak
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")
--- drivers/staging/ks7010/ks7010_sdio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/staging/ks7010/ks7010_sdio.c +6 -2
@@ -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);
Signature · 1 line
2.7.4
I added Colin to the Cc list.
Quoted 21 lines · 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 <[email protected]>--- drivers/staging/ks7010/ks7010_sdio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)drivers/staging/ks7010/ks7010_sdio.c +0
-0
drivers/staging/ks7010/ks7010_sdio.c static int ks7010_sdio_probe(struct sdio_func *func, · line 937
Quoted 8 lines
drivers/staging/ks7010/ks7010_sdio.c +3
-2@@ -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).
drivers/staging/ks7010/ks7010_sdio.c static int ks7010_sdio_probe(struct sdio_func *func, · line 940
Quoted 3 lines
drivers/staging/ks7010/ks7010_sdio.c +3
-0+ }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
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Hi Dan,
Quoted 26 lines · Dan Carpenter
I added Colin to the Cc list.
Quoted 23 lines · 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 <[email protected]>--- drivers/staging/ks7010/ks7010_sdio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)drivers/staging/ks7010/ks7010_sdio.c +0
-0@@ -932,8 +932,12 @@ static int ks7010_sdio_probe(struct sdio_func *func,return 0 ;
Quoted 9 lines
drivers/staging/ks7010/ks7010_sdio.c static int ks7010_sdio_probe(struct sdio_func *func, · line 937
Quoted 6 lines
drivers/staging/ks7010/ks7010_sdio.c +3
-2err_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.
Quoted 7 lines
drivers/staging/ks7010/ks7010_sdio.c static int ks7010_sdio_probe(struct sdio_func *func, · line 940
Quoted 3 lines
drivers/staging/ks7010/ks7010_sdio.c +3
-0+ }else { +free_netdev (netdev); + }That's too complicated. Just do:
Quoted 8 lines
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