X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fjffs2%2Fscan.c;h=327cc17ba1f7fdde1513c2b8e488e93ca2a9f3bf;hb=58b45f408a8821b6d9f0003c3fdfa179145c90e7;hp=8d8cd3419d02a75a7b0a7336da995a430324448b;hpb=204d1641d200709c759d8c269458cbc7de378c40;p=pandora-kernel.git diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c index 8d8cd3419d02..327cc17ba1f7 100644 --- a/fs/jffs2/scan.c +++ b/fs/jffs2/scan.c @@ -275,9 +275,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c) else c->mtd->unpoint(c->mtd, 0, c->mtd->size); #endif - if (s) - kfree(s); - + kfree(s); return ret; } @@ -505,6 +503,10 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo sumlen = c->sector_size - je32_to_cpu(sm->offset); sumptr = buf + buf_size - sumlen; + /* sm->offset maybe wrong but MAGIC maybe right */ + if (sumlen > c->sector_size) + goto full_scan; + /* Now, make sure the summary itself is available */ if (sumlen > buf_size) { /* Need to kmalloc for this. */ @@ -539,6 +541,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo } } +full_scan: buf_ofs = jeb->offset; if (!buf_size) {