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
/*