summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/net/if_ethersubr.c3
-rw-r--r--sys/net/if_fddisubr.c3
-rw-r--r--sys/netinet6/nd6.c15
3 files changed, 14 insertions, 7 deletions
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 57baa21..97beae9 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -184,8 +184,7 @@ ether_output(ifp, m, dst, rt0)
#ifdef INET6
case AF_INET6:
if (!nd6_storelladdr(&ac->ac_if, rt, m, dst, (u_char *)edst)) {
- /* this must be impossible, so we bark */
- printf("nd6_storelladdr failed\n");
+ /* Something bad happened */
return(0);
}
off = m->m_pkthdr.len - m->m_len;
diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c
index bc7136d..734eeec 100644
--- a/sys/net/if_fddisubr.c
+++ b/sys/net/if_fddisubr.c
@@ -180,8 +180,7 @@ fddi_output(ifp, m, dst, rt0)
#ifdef INET6
case AF_INET6:
if (!nd6_storelladdr(&ac->ac_if, rt, m, dst, (u_char *)edst)) {
- /* this must be impossible, so we bark */
- printf("nd6_storelladdr failed\n");
+ /* Something bad happened */
return(0);
}
type = htons(ETHERTYPE_IPV6);
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index a4ddfa1..833e902 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -970,6 +970,7 @@ nd6_resolve(ifp, rt, m, dst, desten)
return(1);
break;
default:
+ m_freem(m);
return(0);
}
}
@@ -1026,6 +1027,7 @@ nd6_resolve(ifp, rt, m, dst, desten)
ln, 0);
}
}
+ /* Do not free mbuf chain here as it is queued in llinfo_nd6 */
return(0);
}
#endif /* OLDIP6OUTPUT */
@@ -1981,19 +1983,26 @@ nd6_storelladdr(ifp, rt, m, dst, desten)
*desten = 0;
return(1);
default:
+ m_freem(m);
return(0);
}
}
- if (rt == NULL ||
- rt->rt_gateway->sa_family != AF_LINK) {
- printf("nd6_storelladdr: something odd happens\n");
+ if (rt == NULL) {
+ /* This could happen if we could not allocate memory */
+ m_freem(m);
+ return(0);
+ }
+ if (rt->rt_gateway->sa_family != AF_LINK) {
+ printf("nd6_storelladdr: something odd happened\n");
+ m_freem(m);
return(0);
}
sdl = SDL(rt->rt_gateway);
if (sdl->sdl_alen == 0) {
/* this should be impossible, but we bark here for debugging */
printf("nd6_storelladdr: sdl_alen == 0\n");
+ m_freem(m);
return(0);
}
OpenPOWER on IntegriCloud