ifaddr refcount problem
Navdeep Parhar
navdeep at chelsio.com
Fri Jun 20 22:36:12 UTC 2014
On 06/20/14 15:20, Alan Somers wrote:
...
>
> Do you have a test case that can reproduce the panic?
>
> -Alan
>
Just run some UDP traffic on head or stable/10 and watch the refcount
leak on the transmitter.
# netperf -H ... -t UDP_STREAM
I see these two do ifa_ref (once per packet).
kernel`ip_output+0x527
kernel`udp_send+0xa88
kernel`sosend_dgram+0x583
kernel`kern_sendit+0x244
kernel`sendit+0x129
kernel`sys_sendto+0x4d
kernel`amd64_syscall+0x3fb
kernel`in_pcbladdr+0x160
kernel`in_pcbconnect_setup+0x18b
kernel`udp_send+0x3d7
kernel`sosend_dgram+0x583
kernel`kern_sendit+0x244
kernel`sendit+0x129
kernel`sys_sendto+0x4d
kernel`amd64_syscall+0x3fb
(kgdb) l *(ip_output + 0x527)
0xffffffff80ac37f7 is in ip_output (/usr/src/sys/netinet/ip_output.c:249).
244 ip->ip_ttl = 1;
245 isbroadcast = 1;
246 ifa_free((void *)ia);
247 } else if (flags & IP_ROUTETOIF) {
248 if ((ia = ifatoia(ifa_ifwithdstaddr(sintosa(dst)))) == NULL &&
249 (ia = ifatoia(ifa_ifwithnet(sintosa(dst), 0))) == NULL) {
250 IPSTAT_INC(ips_noroute);
251 error = ENETUNREACH;
252 goto bad;
253 }
And only this one does ifa_free (once per packet)
kernel`in_pcbladdr+0x1fb
kernel`in_pcbconnect_setup+0x18b
kernel`udp_send+0x3d7
kernel`sosend_dgram+0x583
kernel`kern_sendit+0x244
kernel`sendit+0x129
kernel`sys_sendto+0x4d
kernel`amd64_syscall+0x3fb
So there is a net leak of 1 refcount per packet.
Regards,
Navdeep
More information about the freebsd-net
mailing list