summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp/tcp.c
diff options
context:
space:
mode:
authorErik Nordmark <Erik.Nordmark@Sun.COM>2010-02-17 19:52:19 -0800
committerErik Nordmark <Erik.Nordmark@Sun.COM>2010-02-17 19:52:19 -0800
commit76a1033e5eab8f829e5080c3397bf826f6dd382c (patch)
treeba166dbaf43567f180d7260459c258d5718a271d /usr/src/uts/common/inet/tcp/tcp.c
parent707da956f10b527c61331142582204e292b21bd6 (diff)
downloadillumos-joyent-76a1033e5eab8f829e5080c3397bf826f6dd382c.tar.gz
6923355 tcp leaves conn_ixa->ixa_cred unitialized causing confusion
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp.c')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp.c b/usr/src/uts/common/inet/tcp/tcp.c
index 165614e8f9..1b43c16b72 100644
--- a/usr/src/uts/common/inet/tcp/tcp.c
+++ b/usr/src/uts/common/inet/tcp/tcp.c
@@ -2412,6 +2412,7 @@ tcp_accept_swap(tcp_t *listener, tcp_t *acceptor, tcp_t *eager)
if (econnp->conn_cred != NULL)
crfree(econnp->conn_cred);
econnp->conn_cred = aconnp->conn_cred;
+ econnp->conn_ixa->ixa_cred = econnp->conn_cred;
aconnp->conn_cred = NULL;
econnp->conn_cpid = aconnp->conn_cpid;
ASSERT(econnp->conn_netstack == aconnp->conn_netstack);
@@ -6542,6 +6543,7 @@ tcp_reinit(tcp_t *tcp)
*/
tcp_reinit_values(tcp);
ipcl_hash_remove(connp);
+ /* Note that ixa_cred gets cleared in ixa_cleanup */
ixa_cleanup(connp->conn_ixa);
tcp_ipsec_cleanup(tcp);
@@ -7882,6 +7884,10 @@ tcp_create_common(cred_t *credp, boolean_t isv6, boolean_t issocket,
connp->conn_cpid = curproc->p_pid;
connp->conn_open_time = ddi_get_lbolt64();
+ /* Cache things in the ixa without any refhold */
+ connp->conn_ixa->ixa_cred = credp;
+ connp->conn_ixa->ixa_cpid = connp->conn_cpid;
+
connp->conn_zoneid = zoneid;
/* conn_allzones can not be set this early, hence no IPCL_ZONEID */
connp->conn_ixa->ixa_zoneid = zoneid;