On Wed, Nov 9, 2016 at 8:10 AM, Jiri Benc <[email protected]> wrote:
> On Sat, 5 Nov 2016 11:45:52 -0700, Pravin B Shelar wrote:
>> @@ -2058,7 +2059,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct
>> net_device *dev,
>> err = vxlan_build_skb(skb, &rt->dst, sizeof(struct iphdr),
>> vni, md, flags, udp_sum);
>> if (err < 0)
>> - goto xmit_tx_error;
>> + goto tx_error;
>
> Seems you're leaking rt here?
>
I have moved the dst error handling to vxlan_build_skb(), which is
releasing the dst entry.
>> @@ -2117,11 +2118,9 @@ static void vxlan_xmit_one(struct sk_buff *skb,
>> struct net_device *dev,
>> skb_scrub_packet(skb, xnet);
>> err = vxlan_build_skb(skb, ndst, sizeof(struct ipv6hdr),
>> vni, md, flags, udp_sum);
>> - if (err < 0) {
>> - dst_release(ndst);
>> - dev->stats.tx_errors++;
>> - return;
>> - }
>> + if (err < 0)
>> + goto tx_error;
>
> And ndst here?
>
same as above.