From dd49f125507979bb2ab505a8daf2a46d1be27051 Mon Sep 17 00:00:00 2001 From: Anders Persson Date: Thu, 17 Jun 2010 17:23:59 -0700 Subject: 6939100 convert KSSL into a socket filter --- usr/src/uts/common/inet/tcp/tcp_socket.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'usr/src/uts/common/inet/tcp/tcp_socket.c') 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); /* -- cgit v1.2.3