summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/netinet/ip_input.c8
-rw-r--r--sys/netinet/ip_mroute.c5
-rw-r--r--sys/netinet6/ip6_input.c22
3 files changed, 20 insertions, 15 deletions
diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c
index 9c8c9ba0280..c4bbed9d015 100644
--- a/sys/netinet/ip_input.c
+++ b/sys/netinet/ip_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_input.c,v 1.310 2017/05/31 05:59:09 mpi Exp $ */
+/* $OpenBSD: ip_input.c,v 1.311 2017/06/19 17:00:16 bluhm Exp $ */
/* $NetBSD: ip_input.c,v 1.30 1996/03/16 23:53:58 christos Exp $ */
/*
@@ -377,7 +377,7 @@ ipv4_input(struct ifnet *ifp, struct mbuf *m)
#ifdef MROUTING
if (ipmforwarding && ip_mrouter[ifp->if_rdomain]) {
- int rv;
+ int error;
if (m->m_flags & M_EXT) {
if ((m = m_pullup(m, hlen)) == NULL) {
@@ -399,9 +399,9 @@ ipv4_input(struct ifnet *ifp, struct mbuf *m)
* ip_output().)
*/
KERNEL_LOCK();
- rv = ip_mforward(m, ifp);
+ error = ip_mforward(m, ifp);
KERNEL_UNLOCK();
- if (rv != 0) {
+ if (error) {
ipstat_inc(ips_cantforward);
goto bad;
}
diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c
index 0c32da6c4e4..1f4e6da4478 100644
--- a/sys/netinet/ip_mroute.c
+++ b/sys/netinet/ip_mroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_mroute.c,v 1.118 2017/05/16 13:09:21 rzalamena Exp $ */
+/* $OpenBSD: ip_mroute.c,v 1.119 2017/06/19 17:00:16 bluhm Exp $ */
/* $NetBSD: ip_mroute.c,v 1.85 2004/04/26 01:31:57 matt Exp $ */
/*
@@ -1084,8 +1084,7 @@ ip_mforward(struct mbuf *m, struct ifnet *ifp)
if ((srctun++ % 1000) == 0)
log(LOG_ERR, "ip_mforward: received source-routed "
"packet from %x\n", ntohl(ip->ip_src.s_addr));
-
- return (1);
+ return (EOPNOTSUPP);
}
/*
diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c
index 7018444ba98..b763c59e562 100644
--- a/sys/netinet6/ip6_input.c
+++ b/sys/netinet6/ip6_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip6_input.c,v 1.194 2017/05/31 05:59:09 mpi Exp $ */
+/* $OpenBSD: ip6_input.c,v 1.195 2017/06/19 17:00:16 bluhm Exp $ */
/* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */
/*
@@ -381,6 +381,8 @@ ipv6_input(struct ifnet *ifp, struct mbuf *m)
#ifdef MROUTING
if (ip6_mforwarding && ip6_mrouter[ifp->if_rdomain]) {
+ int error;
+
if (ip6_hbhchcheck(m, &off, &nxt, &ours))
goto out;
@@ -395,16 +397,20 @@ ipv6_input(struct ifnet *ifp, struct mbuf *m)
* must be discarded, else it may be accepted below.
*/
KERNEL_LOCK();
- if (ip6_mforward(ip6, ifp, m)) {
+ error = ip6_mforward(ip6, ifp, m);
+ KERNEL_UNLOCK();
+ if (error) {
ip6stat_inc(ip6s_cantforward);
- m_freem(m);
- } else if (ours) {
+ goto bad;
+ }
+
+ if (ours) {
+ KERNEL_LOCK();
ip6_deliver(&m, &off, nxt, AF_INET6);
- } else {
- m_freem(m);
+ KERNEL_UNLOCK();
+ goto out;
}
- KERNEL_UNLOCK();
- goto out;
+ goto bad;
}
#endif
if (!ours) {