diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 77bf95a..69c8907 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -86,6 +86,8 @@
 #include <sys/syslog.h>
 #include <sys/in_cksum.h>
 
+#include <sys/mplock2.h>
+
 #include <sys/thread2.h>
 #include <sys/socketvar2.h>
 
@@ -852,10 +854,12 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *dstaddr,
 	((struct ip *)ui)->ip_tos = inp->inp_ip_tos;	/* XXX */
 	udpstat.udps_opackets++;
 
+	get_mplock();
 	error = ip_output(m, inp->inp_options, &inp->inp_route,
 	    (inp->inp_socket->so_options & (SO_DONTROUTE | SO_BROADCAST)) |
 	    IP_DEBUGROUTE,
 	    inp->inp_moptions, inp);
+	rel_mplock();
 
 	/*
 	 * If this is the first data gram sent on an unbound and unconnected
