From de1cab2b606b9b65ea65be13c9de2c9ae2a3a083 Mon Sep 17 00:00:00 2001 From: David Malone Date: Thu, 29 May 2003 18:36:26 +0000 Subject: [PATCH] Grab giant in sendit rather than kern_sendit because sockargs may allocate mbufs with M_TRYWAIT, which may require Giant. Reviewed by: bmilekic Approved by: re (scottl) --- sys/kern/uipc_syscalls.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index cf6ef69e0d3..1df7853c4ca 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -623,10 +623,13 @@ sendit(td, s, mp, flags) struct sockaddr *to; int error; + mtx_lock(&Giant); if (mp->msg_name != NULL) { error = getsockaddr(&to, mp->msg_name, mp->msg_namelen); - if (error) - return error; + if (error) { + to = NULL; + goto bad; + } mp->msg_name = to; } else to = NULL; @@ -669,6 +672,7 @@ sendit(td, s, mp, flags) bad: if (to) FREE(to, M_SONAME); + mtx_unlock(&Giant); return (error); } @@ -691,7 +695,6 @@ kern_sendit(td, s, mp, flags, control) int iovlen; #endif - mtx_lock(&Giant); if ((error = fgetsock(td, s, &so, NULL)) != 0) goto bad2; @@ -752,7 +755,6 @@ kern_sendit(td, s, mp, flags, control) bad: fputsock(so); bad2: - mtx_unlock(&Giant); return (error); }