Page MenuHomeFreeBSD

D38507.id116987.diff
No OneTemporary

D38507.id116987.diff

diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -1401,6 +1401,9 @@
NET_EPOCH_ASSERT();
INP_WLOCK_ASSERT(inp);
+ if ((so->so_state & (SS_ISCONNECTING | SS_ISCONNECTED)) != 0)
+ return (EISCONN);
+
INP_HASH_WLOCK(&V_tcbinfo);
error = in_pcbconnect(inp, sin, td->td_ucred, true);
INP_HASH_WUNLOCK(&V_tcbinfo);
@@ -1433,11 +1436,15 @@
tcp6_connect(struct tcpcb *tp, struct sockaddr_in6 *sin6, struct thread *td)
{
struct inpcb *inp = tptoinpcb(tp);
+ struct socket *so = tptosocket(tp);
int error;
NET_EPOCH_ASSERT();
INP_WLOCK_ASSERT(inp);
+ if ((so->so_state & (SS_ISCONNECTING | SS_ISCONNECTED)) != 0)
+ return (EISCONN);
+
INP_HASH_WLOCK(&V_tcbinfo);
error = in6_pcbconnect(inp, sin6, td->td_ucred, true);
INP_HASH_WUNLOCK(&V_tcbinfo);
@@ -1449,7 +1456,7 @@
(TCP_MAXWIN << tp->request_r_scale) < sb_max)
tp->request_r_scale++;
- soisconnecting(inp->inp_socket);
+ soisconnecting(so);
TCPSTAT_INC(tcps_connattempt);
tcp_state_change(tp, TCPS_SYN_SENT);
tp->iss = tcp_new_isn(&inp->inp_inc);

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 9, 9:08 AM (4 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28561304
Default Alt Text
D38507.id116987.diff (1 KB)

Event Timeline