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.
Unified · Split
| @@ -442,8 +442,10 @@ static netdev_tx_t reg_vif_xmit(struct sk_buff *skb, struct net_device *dev) · 441 unmodified lines | ||
| 442 | 442 | int err; |
| 443 | 443 | |
| 444 | 444 | err = ipmr_fib_lookup(net, &fl, &mrt); |
| 445 | − if (err < 0) | |
| 445 | + if (err < 0) { | |
| 446 | + kfree_skb(skb); | |
| 446 | 447 | return err; |
| 448 | + } | |
| 447 | 449 | |
| 448 | 450 | read_lock(&mrt_lock); |
| 449 | 451 | dev->stats.tx_bytes += skb->len; |
| @@ -1728,8 +1730,10 @@ int ip_mr_input(struct sk_buff *skb) · 1278 unmodified lines | ||
| 1728 | 1730 | goto dont_forward; |
| 1729 | 1731 | |
| 1730 | 1732 | err = ipmr_fib_lookup(net, &skb_rtable(skb)->fl, &mrt); |
| 1731 | − if (err < 0) | |
| 1733 | + if (err < 0) { | |
| 1734 | + kfree_skb(skb); | |
| 1732 | 1735 | return err; |
| 1736 | + } | |
| 1733 | 1737 | |
| 1734 | 1738 | if (!local) { |
| 1735 | 1739 | if (IPCB(skb)->opt.router_alert) { |