Index: sys/kern/uipc_syscalls.c =================================================================== --- sys/kern/uipc_syscalls.c +++ sys/kern/uipc_syscalls.c @@ -762,8 +762,11 @@ cap_rights_set(&rights, CAP_CONNECT); } error = getsock_cap(td, s, &rights, &fp, NULL, NULL); - if (error != 0) + if (error != 0) { + if (control != NULL) + m_freem(control); return (error); + } so = (struct socket *)fp->f_data; #ifdef KTRACE @@ -816,6 +819,9 @@ } if (error == 0) td->td_retval[0] = len - auio.uio_resid; + + /* sosend will consume control */ + control = NULL; #ifdef KTRACE if (ktruio != NULL) { ktruio->uio_resid = td->td_retval[0]; @@ -823,6 +829,8 @@ } #endif bad: + if (control != NULL) + m_freem(control); fdrop(fp, td); return (error); }