changeset 10592:62ea4b0f9248

6883357 spdsock leaks ipsec_tun_pol_t structures processing SPD_DUMP
author Dan McDonald <danmcd@sun.com>
date Mon, 21 Sep 2009 12:56:39 -0400
parents 2e4b69967f09
children f28e850593b5
files usr/src/uts/common/inet/ip/spdsock.c
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/inet/ip/spdsock.c	Mon Sep 21 09:38:11 2009 -0700
+++ b/usr/src/uts/common/inet/ip/spdsock.c	Mon Sep 21 12:56:39 2009 -0400
@@ -1420,11 +1420,16 @@
 	mblk_t *m;
 	ipsec_policy_head_t *iph = ss->spdsock_dump_head;
 	mblk_t *req = ss->spdsock_dump_req;
+	netstack_t *ns = ss->spdsock_spds->spds_netstack;
 
 	rw_enter(&iph->iph_lock, RW_READER);
 	m = spdsock_dump_ruleset(req, iph, ss->spdsock_dump_count, error);
 	rw_exit(&iph->iph_lock);
-	IPPH_REFRELE(iph, ss->spdsock_spds->spds_netstack);
+	IPPH_REFRELE(iph, ns);
+	if (ss->spdsock_itp != NULL) {
+		ITP_REFRELE(ss->spdsock_itp, ns);
+		ss->spdsock_itp = NULL;
+	}
 	ss->spdsock_dump_req = NULL;
 	freemsg(req);