diff options
author | sam <sam@FreeBSD.org> | 2003-11-08 22:51:18 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2003-11-08 22:51:18 +0000 |
commit | 354edc9c36ffffe61593e23f55a43078edf473fb (patch) | |
tree | 7287e48a209fc94cac58dd4cc5c492f3349e616d | |
parent | e0d3008a3fb80872d82c1b1ed81635db1b62364e (diff) | |
download | FreeBSD-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
-rw-r--r-- | sys/netinet/ip_mroute.c | 3 |
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; |