When allocating link layer ifnet address list entries in
ifp->if_resolvemulti(), do so with M_NOWAIT rather than M_WAITOK, so that a mutex can be held over the call. In the FDDI code, add a missing M_ZERO. Consumers are already aware that if_resolvemulti() can fail. MFC after: 1 week
This commit is contained in:
parent
de6073aab0
commit
09df718e0e
@ -798,7 +798,9 @@ arc_resolvemulti(ifp, llsa, sa)
|
||||
if (!IN_MULTICAST(ntohl(sin->sin_addr.s_addr)))
|
||||
return EADDRNOTAVAIL;
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_ZERO);
|
||||
M_NOWAIT | M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return ENOMEM;
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
@ -824,7 +826,9 @@ arc_resolvemulti(ifp, llsa, sa)
|
||||
if (!IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
|
||||
return EADDRNOTAVAIL;
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_ZERO);
|
||||
M_NOWAIT | M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return ENOMEM;
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
|
@ -1144,7 +1144,9 @@ ether_resolvemulti(struct ifnet *ifp, struct sockaddr **llsa,
|
||||
if (!IN_MULTICAST(ntohl(sin->sin_addr.s_addr)))
|
||||
return EADDRNOTAVAIL;
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_WAITOK|M_ZERO);
|
||||
M_NOWAIT|M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return ENOMEM;
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
@ -1171,7 +1173,9 @@ ether_resolvemulti(struct ifnet *ifp, struct sockaddr **llsa,
|
||||
if (!IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
|
||||
return EADDRNOTAVAIL;
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_WAITOK|M_ZERO);
|
||||
M_NOWAIT|M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return (ENOMEM);
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
|
@ -720,7 +720,9 @@ fddi_resolvemulti(ifp, llsa, sa)
|
||||
if (!IN_MULTICAST(ntohl(sin->sin_addr.s_addr)))
|
||||
return (EADDRNOTAVAIL);
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_WAITOK);
|
||||
M_NOWAIT | M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return (ENOMEM);
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
@ -749,7 +751,9 @@ fddi_resolvemulti(ifp, llsa, sa)
|
||||
if (!IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
|
||||
return (EADDRNOTAVAIL);
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_WAITOK);
|
||||
M_NOWAIT | M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return (ENOMEM);
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
|
@ -720,7 +720,9 @@ iso88025_resolvemulti (ifp, llsa, sa)
|
||||
return (EADDRNOTAVAIL);
|
||||
}
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_WAITOK|M_ZERO);
|
||||
M_NOWAIT|M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return (ENOMEM);
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
@ -748,7 +750,9 @@ iso88025_resolvemulti (ifp, llsa, sa)
|
||||
return (EADDRNOTAVAIL);
|
||||
}
|
||||
MALLOC(sdl, struct sockaddr_dl *, sizeof *sdl, M_IFMADDR,
|
||||
M_WAITOK|M_ZERO);
|
||||
M_NOWAIT|M_ZERO);
|
||||
if (sdl == NULL)
|
||||
return (ENOMEM);
|
||||
sdl->sdl_len = sizeof *sdl;
|
||||
sdl->sdl_family = AF_LINK;
|
||||
sdl->sdl_index = ifp->if_index;
|
||||
|
Loading…
Reference in New Issue
Block a user