Plug several mbuf leaks in error cases (in nd6)
Submitted by: jhay
This commit is contained in:
parent
93bcc12612
commit
dba0ff5a09
@ -184,8 +184,7 @@ ether_output(ifp, m, dst, rt0)
|
|||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
if (!nd6_storelladdr(&ac->ac_if, rt, m, dst, (u_char *)edst)) {
|
if (!nd6_storelladdr(&ac->ac_if, rt, m, dst, (u_char *)edst)) {
|
||||||
/* this must be impossible, so we bark */
|
/* Something bad happened */
|
||||||
printf("nd6_storelladdr failed\n");
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
off = m->m_pkthdr.len - m->m_len;
|
off = m->m_pkthdr.len - m->m_len;
|
||||||
|
@ -180,8 +180,7 @@ fddi_output(ifp, m, dst, rt0)
|
|||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
if (!nd6_storelladdr(&ac->ac_if, rt, m, dst, (u_char *)edst)) {
|
if (!nd6_storelladdr(&ac->ac_if, rt, m, dst, (u_char *)edst)) {
|
||||||
/* this must be impossible, so we bark */
|
/* Something bad happened */
|
||||||
printf("nd6_storelladdr failed\n");
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
type = htons(ETHERTYPE_IPV6);
|
type = htons(ETHERTYPE_IPV6);
|
||||||
|
@ -970,6 +970,7 @@ nd6_resolve(ifp, rt, m, dst, desten)
|
|||||||
return(1);
|
return(1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
m_freem(m);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1026,6 +1027,7 @@ nd6_resolve(ifp, rt, m, dst, desten)
|
|||||||
ln, 0);
|
ln, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Do not free mbuf chain here as it is queued in llinfo_nd6 */
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
#endif /* OLDIP6OUTPUT */
|
#endif /* OLDIP6OUTPUT */
|
||||||
@ -1981,19 +1983,26 @@ nd6_storelladdr(ifp, rt, m, dst, desten)
|
|||||||
*desten = 0;
|
*desten = 0;
|
||||||
return(1);
|
return(1);
|
||||||
default:
|
default:
|
||||||
|
m_freem(m);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rt == NULL ||
|
if (rt == NULL) {
|
||||||
rt->rt_gateway->sa_family != AF_LINK) {
|
/* This could happen if we could not allocate memory */
|
||||||
printf("nd6_storelladdr: something odd happens\n");
|
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);
|
return(0);
|
||||||
}
|
}
|
||||||
sdl = SDL(rt->rt_gateway);
|
sdl = SDL(rt->rt_gateway);
|
||||||
if (sdl->sdl_alen == 0) {
|
if (sdl->sdl_alen == 0) {
|
||||||
/* this should be impossible, but we bark here for debugging */
|
/* this should be impossible, but we bark here for debugging */
|
||||||
printf("nd6_storelladdr: sdl_alen == 0\n");
|
printf("nd6_storelladdr: sdl_alen == 0\n");
|
||||||
|
m_freem(m);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user