summaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/ip_input.c9
-rw-r--r--sys/netinet/ip_output.c21
2 files changed, 23 insertions, 7 deletions
diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c
index e02e11b7145..f6474023c70 100644
--- a/sys/netinet/ip_input.c
+++ b/sys/netinet/ip_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_input.c,v 1.60 2000/10/13 02:01:10 itojun Exp $ */
+/* $OpenBSD: ip_input.c,v 1.61 2000/12/03 19:56:20 angelos Exp $ */
/* $NetBSD: ip_input.c,v 1.30 1996/03/16 23:53:58 christos Exp $ */
/*
@@ -420,6 +420,13 @@ ipv4_input(struct mbuf *m, ...)
#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
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index ec7ab4151fb..9be0faaaca9 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_output.c,v 1.84 2000/11/07 18:24:26 provos Exp $ */
+/* $OpenBSD: ip_output.c,v 1.85 2000/12/03 19:56:20 angelos Exp $ */
/* $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $ */
/*
@@ -559,16 +559,21 @@ sendit:
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;
}
@@ -599,8 +604,12 @@ sendit:
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
/*