[csjp@FreeBSD.org: Re: rtfree: 0xffffff00036fb1e0 has 1 refs]
Christian S.J. Peron
csjp at FreeBSD.org
Tue Aug 28 11:24:26 PDT 2007
I am not sure who has their hands in the routing code these days so
I figured I would just forward this message off here. Does the
following look reasonable?
----- Forwarded message from "Christian S.J. Peron" <csjp at FreeBSD.org> -----
From: "Christian S.J. Peron" <csjp at FreeBSD.org>
To: Yuri Pankov <yuri at darklight.org.ru>
Cc: freebsd-current at freebsd.org
Date: Mon, 27 Aug 2007 18:59:03 -0500
Subject: Re: rtfree: 0xffffff00036fb1e0 has 1 refs
Based on some comments in rtfree, we should only be calling rtfree if we
are sure we own the last reference to the route. I am not sure this is the
case in the stf/gif cases... Please try the attached patch and let me know
if there are any ill effects.
On Fri, Aug 24, 2007 at 12:17:26PM +0400, Yuri Pankov wrote:
> Hi,
>
> I've recently started using he.net's ipv6 tunnel and getting this message:
> rtfree: 0xffffff00036fb1e0 has 1 refs
>
> I've added kdb_backtrace() in route.c as Gleb Smirnoff suggested before. Here's
> backtrace:
> rtfree: 0xffffff00036fb1e0 has 1 refs
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2a
> rtfree() at rtfree+0xba
> gif_encapcheck4() at gif_encapcheck4+0x118
> gif_encapcheck() at gif_encapcheck+0xfd
> encap4_input() at encap4_input+0xcc
> ip_input() at ip_input+0xc0
> tunwrite() at tunwrite+0x1d5
> giant_write() at giant_write+0x51
> devfs_write_f() at devfs_write_f+0x9c
> dofilewrite() at dofilewrite+0x85
> kern_writev() at kern_writev+0x4c
> write() at write+0x54
> syscall() at syscall+0x1ce
> Xfast_syscall() at Xfast_syscall+0xab
> --- syscall (4, FreeBSD ELF64, write), rip = 0x80125c35c, rsp = 0x7fffffffda18,
> rbp = 0x60 ---
>
>
> ifconfig:
> gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
> tunnel inet 194.186.18.14 --> 64.71.128.83
> inet6 fe80::20f:eaff:fe7d:f320%gif0 prefixlen 64 scopeid 0x5
> inet6 2001:470:1f03:2d5::2 --> 2001:470:1f03:2d5::1 prefixlen 128
> inet6 2001:470:1f01:725::1 prefixlen 64
> tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
> inet6 fe80::20f:eaff:fe7d:f320%tun0 prefixlen 64 scopeid 0x6
> inet 194.186.18.14 --> 194.186.18.2 netmask 0xffffff00
> Opened by PID 458
>
>
> Yuri
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
--
Christian S.J. Peron
csjp at FreeBSD.ORG
FreeBSD Committer
Index: net/if_stf.c
===================================================================
RCS file: /usr/ncvs/src/sys/net/if_stf.c,v
retrieving revision 1.59
diff -u -r1.59 if_stf.c
--- net/if_stf.c 22 Oct 2006 11:52:15 -0000 1.59
+++ net/if_stf.c 27 Aug 2007 23:51:19 -0000
@@ -607,10 +607,10 @@
(u_int32_t)ntohl(sin.sin_addr.s_addr));
#endif
if (rt)
- rtfree(rt);
+ RTFREE_LOCKED(rt);
return -1;
}
- rtfree(rt);
+ RTFREE_LOCKED(rt);
}
return 0;
Index: netinet/in_gif.c
===================================================================
RCS file: /usr/ncvs/src/sys/netinet/in_gif.c,v
retrieving revision 1.36
diff -u -r1.36 in_gif.c
--- netinet/in_gif.c 10 May 2007 15:58:47 -0000 1.36
+++ netinet/in_gif.c 27 Aug 2007 23:48:04 -0000
@@ -374,10 +374,10 @@
(u_int32_t)ntohl(sin.sin_addr.s_addr));
#endif
if (rt)
- rtfree(rt);
+ RTFREE_LOCKED(rt);
return 0;
}
- rtfree(rt);
+ RTFREE_LOCKED(rt);
}
return 32 * 2;
_______________________________________________
freebsd-current at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
----- End forwarded message -----
More information about the freebsd-net
mailing list