Index: sys/net/if_ethersubr.c =================================================================== RCS file: /home/ncvs/src/sys/net/if_ethersubr.c,v retrieving revision 1.91 diff -u -r1.91 if_ethersubr.c --- sys/net/if_ethersubr.c 2001/02/18 17:54:52 1.91 +++ sys/net/if_ethersubr.c 2001/03/11 05:22:38 @@ -184,8 +184,7 @@ #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; Index: sys/net/if_fddisubr.c =================================================================== RCS file: /home/ncvs/src/sys/net/if_fddisubr.c,v retrieving revision 1.49 diff -u -r1.49 if_fddisubr.c --- sys/net/if_fddisubr.c 2001/02/04 13:12:56 1.49 +++ sys/net/if_fddisubr.c 2001/03/11 05:23:09 @@ -180,8 +180,7 @@ #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); Index: sys/netinet6/nd6.c =================================================================== RCS file: /home/ncvs/src/sys/netinet6/nd6.c,v retrieving revision 1.7 diff -u -r1.7 nd6.c --- sys/netinet6/nd6.c 2001/02/26 03:41:13 1.7 +++ sys/netinet6/nd6.c 2001/03/11 05:28:11 @@ -970,6 +970,7 @@ return(1); break; default: + m_freem(m); return(0); } } @@ -1026,6 +1027,7 @@ ln, 0); } } + /* Do not free mbuf chain here as it is queued in llinfo_nd6 */ return(0); } #endif /* OLDIP6OUTPUT */ @@ -1981,19 +1983,26 @@ *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); }