Fixes fastroute-related panic's (pr 1541). Apply by doing: cd /usr/src patch -p0 < 010_fastroute.patch And then rebuild your kernel. Index: sys/netinet/ip_input.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_input.c,v retrieving revision 1.60 diff -u -r1.60 ip_input.c --- ip_input.c 2000/10/13 02:01:10 1.60 +++ ip_input.c 2000/12/11 04:58:20 @@ -420,6 +420,13 @@ #endif /* IPSEC */ return; } + if (m0 == 0) { /* in case of 'fastroute' */ +#ifdef IPSEC + if (tdbi) + free (tdbi, M_TEMP); +#endif /* IPSEC */ + return; + } ip = mtod(m = m0, struct ip *); } #endif Index: sys/netinet/ip_output.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_output.c,v retrieving revision 1.83 diff -u -r1.83 ip_output.c --- ip_output.c 2000/10/25 22:40:40 1.83 +++ ip_output.c 2000/12/11 04:58:29 @@ -557,16 +557,21 @@ error = EHOSTUNREACH; splx(s); goto done; - } else { - ip = mtod(m = m0, struct ip *); - hlen = ip->ip_hl << 2; } + if (m0 == 0) { /* in case of 'fastroute' */ + error = 0; + splx(s); + goto done; + } + ip = mtod(m = m0, struct ip *); + hlen = ip->ip_hl << 2; } #endif /* IPFILTER */ tdb = gettdb(sspi, &sdst, sproto); if (tdb == NULL) { error = EHOSTUNREACH; + splx(s); m_freem(m); goto done; } @@ -597,8 +602,12 @@ if (fr_checkp && (*fr_checkp)(ip, hlen, ifp, 1, &m0)) { error = EHOSTUNREACH; goto done; - } else - ip = mtod(m = m0, struct ip *); + } + if (m0 == 0) { /* in case of 'fastroute' */ + error = 0; + goto done; + } + ip = mtod(m = m0, struct ip *); } #endif /*