libsemanage: genhomedircon: double free in get_home_dirs

Right before the call to semanage_list_sort() we do some cleanup.
Including endpwent(); free(rbuf); semanage_list_destroy(&shells);  If
the call to the list sort fails we will go to fail: and will do those
cleanups a second time.  Whoops.  Do the list sort before the generic
cleanups so the failure code isn't run after the default cleanup.

Signed-off-by: Eric Paris <[email protected]>
diff --git a/libsemanage/src/genhomedircon.c b/libsemanage/src/genhomedircon.c
index 70756a9..5c2f07f 100644
--- a/libsemanage/src/genhomedircon.c
+++ b/libsemanage/src/genhomedircon.c
@@ -401,11 +401,13 @@
 		WARN(s->h_semanage, "Error while fetching users.  "
 		     "Returning list so far.");
 	}
+
+	if (semanage_list_sort(&homedir_list))
+		goto fail;
+
 	endpwent();
 	free(rbuf);
 	semanage_list_destroy(&shells);
-	if (semanage_list_sort(&homedir_list))
-		goto fail;
 
 	return homedir_list;