libsemanage: genhomedircon: fix possible double-free

When write_contexts() frees variables context and new_context_str after
a line has been successfully emitted, these variables are not reset to
NULL. This leads the function to free them again if an error occurs when
processing the next line. Fix this by always resetting these variables
at the beginning of the loop.

This issue has been found using clang's static analyzer.

Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
This commit is contained in:
Nicolas Iooss 2017-03-28 23:41:52 +02:00 committed by James Carter
parent 85da6194ea
commit 03298a22f7

View File

@ -607,10 +607,12 @@ static int write_contexts(genhomedircon_settings_t *s, FILE *out,
const genhomedircon_user_entry_t *user)
{
char *line, *temp;
sepol_context_t *context = NULL;
char *new_context_str = NULL;
sepol_context_t *context;
char *new_context_str;
for (; tpl; tpl = tpl->next) {
context = NULL;
new_context_str = NULL;
line = replace_all(tpl->data, repl);
if (!line) {
goto fail;