From patchwork Mon Nov 14 07:54:08 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: ipv4: fix a memory leak in ic_bootp_send_if Date: Sun, 13 Nov 2011 21:54:08 -0000 From: roy.qing.li@gmail.com X-Patchwork-Id: 125499 Message-Id: <1321257248-14175-1-git-send-email-roy.qing.li@gmail.com> To: netdev@vger.kernel.org From: RongQing.Li when dev_hard_header() failed, the newly allocated skb should be freed. Signed-off-by: RongQing.Li --- net/ipv4/ipconfig.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index 0da2afc..7f17ba8 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c @@ -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"); }