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