diff --git a/lib/mounts.c b/lib/mounts.c index ce6a60a..fe1a6cd 100644 --- a/lib/mounts.c +++ b/lib/mounts.c @@ -1552,28 +1552,31 @@ void set_tsd_user_vars(unsigned int logopt, uid_t uid, gid_t gid) } no_group: - if (status || !pgr) + if (status || !pgr) { error(logopt, "failed to get group info from getgrgid_r"); - else { + goto free_gr_tmp; + } else { tsv->group = strdup(gr.gr_name); - if (!tsv->group) + if (!tsv->group) { error(logopt, "failed to malloc buffer for group"); + goto free_gr_tmp; + } } - if (gr_tmp) - free(gr_tmp); - status = pthread_setspecific(key_thread_stdenv_vars, tsv); if (status) { error(logopt, "failed to set stdenv thread var"); goto free_tsv_group; } - + if (gr_tmp) + free(gr_tmp); return; free_tsv_group: - if (tsv->group) - free(tsv->group); + free(tsv->group); +free_gr_tmp: + if (gr_tmp) + free(gr_tmp); free_tsv_home: free(tsv->home); free_tsv_user: