Commit 8d34e7d6 authored by Julia Lawall's avatar Julia Lawall Committed by David S. Miller

drivers/net/irda: Eliminate memory leak

dev_alloc_skb allocates some memory, so that memory should be freed before
leaving the function in an error case.

Corrected some typos in a nearby comment as well.

A simplified version of the semantic match that finds this problem is:
(http://coccinelle.lip6.fr/)

// <smpl>
@r exists@
local idexpression x;
expression E;
identifier f1;
iterator I;
@@

x = dev_alloc_skb(...);
<... when != x
     when != true (x == NULL || ...)
     when != if (...) { <+...x...+> }
     when != I (...) { <+...x...+> }
(
 x == NULL
|
 x == E
|
 x->f1
)
...>
* return ...;
// </smpl>
Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 21ff2929
...@@ -1182,12 +1182,13 @@ F01_E */ ...@@ -1182,12 +1182,13 @@ F01_E */
skb = dev_alloc_skb(len + 1 - 4); skb = dev_alloc_skb(len + 1 - 4);
/* /*
* if frame size,data ptr,or skb ptr are wrong ,the get next * if frame size, data ptr, or skb ptr are wrong, then get next
* entry. * entry.
*/ */
if ((skb == NULL) || (skb->data == NULL) || if ((skb == NULL) || (skb->data == NULL) ||
(self->rx_buff.data == NULL) || (len < 6)) { (self->rx_buff.data == NULL) || (len < 6)) {
self->netdev->stats.rx_dropped++; self->netdev->stats.rx_dropped++;
kfree_skb(skb);
return TRUE; return TRUE;
} }
skb_reserve(skb, 1); skb_reserve(skb, 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment