ipv4: fix a memory leak in ic_bootp_send_if
authorRongQing.Li <roy.qing.li@gmail.com>
Mon, 14 Nov 2011 19:37:24 +0000 (14:37 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Nov 2011 19:37:24 +0000 (14:37 -0500)
when dev_hard_header() failed, the newly allocated skb should be freed.

Signed-off-by: RongQing.Li <roy.qing.li@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ipconfig.c

index 0da2afc97f32ffae2773098391aba0dcbd004903..7f17ba8b03187495642d51549f15046265f11c4c 100644 (file)
@@ -822,8 +822,13 @@ static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_d
        skb->dev = dev;
        skb->protocol = htons(ETH_P_IP);
        if (dev_hard_header(skb, dev, ntohs(skb->protocol),
-                           dev->broadcast, dev->dev_addr, skb->len) < 0 ||
-           dev_queue_xmit(skb) < 0)
+                           dev->broadcast, dev->dev_addr, skb->len) < 0) {
+               kfree_skb(skb);
+               printk("E");
+               return;
+       }
+
+       if (dev_queue_xmit(skb) < 0)
                printk("E");
 }