From e1400f04044e8405419ee4534f8ff4f45c5d532a Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Tue, 5 Feb 2013 14:15:56 -0500 Subject: [PATCH] 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 --- libsemanage/src/genhomedircon.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libsemanage/src/genhomedircon.c b/libsemanage/src/genhomedircon.c index 70756a9b..5c2f07f8 100644 --- a/libsemanage/src/genhomedircon.c +++ b/libsemanage/src/genhomedircon.c @@ -401,11 +401,13 @@ static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s) 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;