Skip to content

Commit

Permalink
ipmr: Don't leak memory if fib lookup fails.
Browse files Browse the repository at this point in the history
This was detected using two mcast router tables.  The
pimreg for the second interface did not have a specific
mrule, so packets received by it were handled by the
default table, which had nothing configured.

This caused the ipmr_fib_lookup to fail, causing
the memory leak.

Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ben Greear authored and David S. Miller committed Jul 16, 2010
1 parent b0f77d0 commit e40dbc5
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions net/ipv4/ipmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -442,8 +442,10 @@ static netdev_tx_t reg_vif_xmit(struct sk_buff *skb, struct net_device *dev)
int err;

err = ipmr_fib_lookup(net, &fl, &mrt);
if (err < 0)
if (err < 0) {
kfree_skb(skb);
return err;
}

read_lock(&mrt_lock);
dev->stats.tx_bytes += skb->len;
Expand Down Expand Up @@ -1728,8 +1730,10 @@ int ip_mr_input(struct sk_buff *skb)
goto dont_forward;

err = ipmr_fib_lookup(net, &skb_rtable(skb)->fl, &mrt);
if (err < 0)
if (err < 0) {
kfree_skb(skb);
return err;
}

if (!local) {
if (IPCB(skb)->opt.router_alert) {
Expand Down

0 comments on commit e40dbc5

Please sign in to comment.