changeset 10968:7ccd43cefe5e

6898147 Inappropriate nvlist_free in x86gentopo's chip enumerator
author Srihari Venkatesan <Srihari.Venkatesan@Sun.COM>
date Thu, 05 Nov 2009 15:01:10 -0800
parents 0f20d1dba80d
children ed9b19e85c90
files usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c
diffstat 1 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c	Thu Nov 05 15:47:57 2009 -0700
+++ b/usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c	Thu Nov 05 15:01:10 2009 -0800
@@ -722,7 +722,7 @@
     int model, int *nerrp)
 {
 	tnode_t *mcnode;
-	nvlist_t *fmri;
+	nvlist_t *rfmri, *fmri;
 	nvpair_t *nvp;
 	nvlist_t *mc = NULL;
 	int i, err;
@@ -743,14 +743,15 @@
 		return;
 
 	if (FM_AWARE_SMBIOS(mod)) {
-		(void) topo_node_resource(pnode, &fmri, &err);
-		(void) nvlist_lookup_string(fmri, "serial", &serial);
-		(void) nvlist_lookup_string(fmri, "part", &part);
-		(void) nvlist_lookup_string(fmri, "revision", &rev);
-		nvlist_free(fmri);
+		(void) topo_node_resource(pnode, &rfmri, &err);
+		(void) nvlist_lookup_string(rfmri, "serial", &serial);
+		(void) nvlist_lookup_string(rfmri, "part", &part);
+		(void) nvlist_lookup_string(rfmri, "revision", &rev);
 	}
 
 	if (mkrsrc(mod, pnode, name, mcnum, auth, &fmri) != 0) {
+		if (FM_AWARE_SMBIOS(mod))
+			nvlist_free(rfmri);
 		whinge(mod, nerrp, "mc_create: mkrsrc failed\n");
 		return;
 	}
@@ -759,6 +760,7 @@
 		(void) nvlist_add_string(fmri, "serial", serial);
 		(void) nvlist_add_string(fmri, "part", part);
 		(void) nvlist_add_string(fmri, "revision", rev);
+		nvlist_free(rfmri);
 	}
 
 	if ((mcnode = topo_node_bind(mod, pnode, name, mcnum,