aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jffs2/scan.c
diff options
context:
space:
mode:
authorWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2015-10-23 18:57:10 +0200
committerWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2015-10-23 18:57:10 +0200
commitde04df3a2555ac04d19c3ad6528503d5bf4ab0e7 (patch)
treefb3c0b36662106c463ad73b2ed5f1c48d325484a /fs/jffs2/scan.c
parent25fbe5ca4d0f37170451b682bd150a70f944aca0 (diff)
downloadkernel_samsung_smdk4412-de04df3a2555ac04d19c3ad6528503d5bf4ab0e7.zip
kernel_samsung_smdk4412-de04df3a2555ac04d19c3ad6528503d5bf4ab0e7.tar.gz
kernel_samsung_smdk4412-de04df3a2555ac04d19c3ad6528503d5bf4ab0e7.tar.bz2
getting newer filesystem code working
Diffstat (limited to 'fs/jffs2/scan.c')
-rw-r--r--fs/jffs2/scan.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c
index 8d8cd34..327cc17 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) {