aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/in_pcb.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/in_pcb.c')
-rw-r--r--sys/netinet/in_pcb.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 5adac0fddddf..8232003b3808 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -3399,7 +3399,12 @@ in_pcbattach_txrtlmt(struct inpcb *inp, struct ifnet *ifp,
INP_WLOCK_ASSERT(inp);
- if (*st != NULL)
+ /*
+ * If there is already a send tag, or the INP is being torn
+ * down, allocating a new send tag is not allowed. Else send
+ * tags may leak.
+ */
+ if (*st != NULL || (inp->inp_flags & (INP_TIMEWAIT | INP_DROPPED)) != 0)
return (EINVAL);
error = m_snd_tag_alloc(ifp, &params, st);