diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index 9c541dba852..47d12f852b2 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -837,7 +837,7 @@ udp_output(inp, m, addr, control, td) M_PREPEND(m, sizeof(struct udpiphdr), M_DONTWAIT); if (m == 0) { error = ENOBUFS; - goto release; + goto disconnect; } /* @@ -879,6 +879,12 @@ udp_output(inp, m, addr, control, td) inp->inp_moptions, inp); return (error); +disconnect: + if (addr) { + in_pcbdisconnect(inp); + inp->inp_laddr = laddr; + } + release: m_freem(m); return (error);