summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp/tcp_socket.c
diff options
context:
space:
mode:
authorAnders Persson <Anders.Persson@Sun.COM>2010-06-17 17:23:59 -0700
committerAnders Persson <Anders.Persson@Sun.COM>2010-06-17 17:23:59 -0700
commitdd49f125507979bb2ab505a8daf2a46d1be27051 (patch)
tree8156589971913212e7b7155026e8e18a79acdbfa /usr/src/uts/common/inet/tcp/tcp_socket.c
parent3e95bd4ab92abca814bd28e854607d1975c7dc88 (diff)
downloadillumos-joyent-dd49f125507979bb2ab505a8daf2a46d1be27051.tar.gz
6939100 convert KSSL into a socket filter
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp_socket.c')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp_socket.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp_socket.c b/usr/src/uts/common/inet/tcp/tcp_socket.c
index f5df6b156c..c42ac46ef9 100644
--- a/usr/src/uts/common/inet/tcp/tcp_socket.c
+++ b/usr/src/uts/common/inet/tcp/tcp_socket.c
@@ -131,13 +131,19 @@ tcp_accept(sock_lower_handle_t lproto_handle,
conn_t *lconnp, *econnp;
tcp_t *listener, *eager;
- lconnp = (conn_t *)lproto_handle;
- listener = lconnp->conn_tcp;
- ASSERT(listener->tcp_state == TCPS_LISTEN);
+ /*
+ * KSSL can move a socket from one listener to another, in which
+ * case `lproto_handle' points to the new listener. To ensure that
+ * the original listener is used the information is obtained from
+ * the eager.
+ */
econnp = (conn_t *)eproto_handle;
eager = econnp->conn_tcp;
- ASSERT(eager->tcp_listener != NULL);
ASSERT(IPCL_IS_NONSTR(econnp));
+ ASSERT(eager->tcp_listener != NULL);
+ listener = eager->tcp_listener;
+ lconnp = (conn_t *)listener->tcp_connp;
+ ASSERT(listener->tcp_state == TCPS_LISTEN);
ASSERT(lconnp->conn_upper_handle != NULL);
/*