jffs2: clean the cache in case of malloc fails in build_lists
We should call jffs2_clean_cache() if we return from jffs2_build_lists() with an error to prevent usage of incomplete lists. Also we should free() a local buffer to prevent memory leaks. Signed-off-by: Ilya Yanok <yanok@emcraft.com>
This commit is contained in:
parent
7ff66bb0be
commit
b644006e1a
@ -1457,6 +1457,8 @@ jffs2_1pass_build_lists(struct part_info * part)
|
||||
if (!sumptr) {
|
||||
putstr("Can't get memory for summary "
|
||||
"node!\n");
|
||||
free(buf);
|
||||
jffs2_free_cache(part);
|
||||
return 0;
|
||||
}
|
||||
memcpy(sumptr + sumlen - buf_len, buf +
|
||||
@ -1478,8 +1480,11 @@ jffs2_1pass_build_lists(struct part_info * part)
|
||||
|
||||
if (buf_size && sumlen > buf_size)
|
||||
free(sumptr);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
free(buf);
|
||||
jffs2_free_cache(part);
|
||||
return 0;
|
||||
}
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
@ -1592,8 +1597,11 @@ jffs2_1pass_build_lists(struct part_info * part)
|
||||
break;
|
||||
|
||||
if (insert_node(&pL->frag, (u32) part->offset +
|
||||
ofs) == NULL)
|
||||
ofs) == NULL) {
|
||||
free(buf);
|
||||
jffs2_free_cache(part);
|
||||
return 0;
|
||||
}
|
||||
if (max_totlen < node->totlen)
|
||||
max_totlen = node->totlen;
|
||||
break;
|
||||
@ -1619,8 +1627,11 @@ jffs2_1pass_build_lists(struct part_info * part)
|
||||
if (! (counterN%100))
|
||||
puts ("\b\b. ");
|
||||
if (insert_node(&pL->dir, (u32) part->offset +
|
||||
ofs) == NULL)
|
||||
ofs) == NULL) {
|
||||
free(buf);
|
||||
jffs2_free_cache(part);
|
||||
return 0;
|
||||
}
|
||||
if (max_totlen < node->totlen)
|
||||
max_totlen = node->totlen;
|
||||
counterN++;
|
||||
|
Loading…
Reference in New Issue
Block a user