summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_mroute.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2003-11-08 22:51:18 +0000
committersam <sam@FreeBSD.org>2003-11-08 22:51:18 +0000
commit354edc9c36ffffe61593e23f55a43078edf473fb (patch)
tree7287e48a209fc94cac58dd4cc5c492f3349e616d /sys/netinet/ip_mroute.c
parente0d3008a3fb80872d82c1b1ed81635db1b62364e (diff)
downloadFreeBSD-src-354edc9c36ffffe61593e23f55a43078edf473fb.zip
FreeBSD-src-354edc9c36ffffe61593e23f55a43078edf473fb.tar.gz
the sbappendaddr call in socket_send must be protected by Giant
because it can happen from an MPSAFE callout Supported by: FreeBSD Foundation
Diffstat (limited to 'sys/netinet/ip_mroute.c')
-rw-r--r--sys/netinet/ip_mroute.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c
index a7265ac..447cc27 100644
--- a/sys/netinet/ip_mroute.c
+++ b/sys/netinet/ip_mroute.c
@@ -1289,10 +1289,13 @@ static int
socket_send(struct socket *s, struct mbuf *mm, struct sockaddr_in *src)
{
if (s) {
+ mtx_lock(&Giant); /* XXX until sockets are locked */
if (sbappendaddr(&s->so_rcv, (struct sockaddr *)src, mm, NULL) != 0) {
sorwakeup(s);
+ mtx_unlock(&Giant);
return 0;
}
+ mtx_unlock(&Giant);
}
m_freem(mm);
return -1;
OpenPOWER on IntegriCloud