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 <ya...@emcraft.com>
---
 fs/jffs2/jffs2_1pass.c |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index 07511b9..1923ed9 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -1496,6 +1496,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 +
@@ -1517,8 +1519,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;
 
@@ -1632,8 +1637,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;
@@ -1659,8 +1667,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++;
-- 
1.6.0.6

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to