diff options
author | tuexen <tuexen@FreeBSD.org> | 2011-09-14 19:10:13 +0000 |
---|---|---|
committer | tuexen <tuexen@FreeBSD.org> | 2011-09-14 19:10:13 +0000 |
commit | 0e8ff918fb8c9f8e97cce19735ec7f77110d134c (patch) | |
tree | e37ede04ab1f8fd299aa01da6472fbfad8f5ec22 /sys/netinet/sctp_pcb.c | |
parent | 79dd2afc0bac76768a48b949de5750372af85472 (diff) | |
download | FreeBSD-src-0e8ff918fb8c9f8e97cce19735ec7f77110d134c.zip FreeBSD-src-0e8ff918fb8c9f8e97cce19735ec7f77110d134c.tar.gz |
Ensure that 1-to-1 style SCTP sockets can only be connected once.
Allow implicit setup also for 1-to-1 style sockets as described
in the latest version of the socket API ID.
Approved by: re
MFC after: 1 month
Diffstat (limited to 'sys/netinet/sctp_pcb.c')
-rw-r--r-- | sys/netinet/sctp_pcb.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index e397316..e5581e1 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -4291,6 +4291,16 @@ sctp_aloc_assoc(struct sctp_inpcb *inp, struct sockaddr *firstaddr, *error = EINVAL; return (NULL); } + if ((inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL) || + (inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE)) { + if ((inp->sctp_flags & SCTP_PCB_FLAGS_WAS_CONNECTED) || + (inp->sctp_flags & SCTP_PCB_FLAGS_WAS_ABORTED)) { + SCTP_INP_RUNLOCK(inp); + SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EINVAL); + *error = EINVAL; + return (NULL); + } + } SCTPDBG(SCTP_DEBUG_PCB3, "Allocate an association for peer:"); #ifdef SCTP_DEBUG if (firstaddr) { |