diff -ur on17/usr/src/lib/libpam/pam_framework.c bc-on17/usr/src/lib/libpam/pam_framework.c
--- on17/usr/src/lib/libpam/pam_framework.c	Tue Jun 14 02:45:11 2005
+++ bc-on17/usr/src/lib/libpam/pam_framework.c	Sun Jul 10 15:38:54 2005
@@ -1477,12 +1477,10 @@
 			goto out;
 		}
 		if ((traverse->name = strdup(name)) == 0) {
-			free_env(traverse);
 			error = PAM_BUF_ERR;
 			goto out;
 		}
 		if ((traverse->value = strdup(value)) == 0) {
-			free_env(traverse);
 			error = PAM_BUF_ERR;
 			goto out;
 		}
@@ -1497,15 +1495,8 @@
 
 	error = PAM_SUCCESS;
 out:
-	if (error != PAM_SUCCESS) {
-		if (traverse) {
-			if (traverse->name)
-				free(traverse->name);
-			if (traverse->value)
-				free(traverse->value);
-			free(traverse);
-		}
-	}
+	if (error != PAM_SUCCESS)
+		free_env(traverse);
 	if (name)
 		free(name);
 	if (value)
