hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/jffs2/scan.c
....@@ -136,7 +136,7 @@
136136 if (!s) {
137137 JFFS2_WARNING("Can't allocate memory for summary\n");
138138 ret = -ENOMEM;
139
- goto out;
139
+ goto out_buf;
140140 }
141141 }
142142
....@@ -261,7 +261,8 @@
261261 }
262262 #endif
263263 if (c->nr_erasing_blocks) {
264
- if ( !c->used_size && ((c->nr_free_blocks+empty_blocks+bad_blocks)!= c->nr_blocks || bad_blocks == c->nr_blocks) ) {
264
+ if (!c->used_size && !c->unchecked_size &&
265
+ ((c->nr_free_blocks+empty_blocks+bad_blocks) != c->nr_blocks || bad_blocks == c->nr_blocks)) {
265266 pr_notice("Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes\n");
266267 pr_notice("empty_blocks %d, bad_blocks %d, c->nr_blocks %d\n",
267268 empty_blocks, bad_blocks, c->nr_blocks);
....@@ -274,13 +275,15 @@
274275 }
275276 ret = 0;
276277 out:
278
+ jffs2_sum_reset_collected(s);
279
+ kfree(s);
280
+ out_buf:
277281 if (buf_size)
278282 kfree(flashbuf);
279283 #ifndef __ECOS
280284 else
281285 mtd_unpoint(c->mtd, 0, c->mtd->size);
282286 #endif
283
- kfree(s);
284287 return ret;
285288 }
286289
....@@ -527,8 +530,11 @@
527530 err = jffs2_fill_scan_buf(c, sumptr,
528531 jeb->offset + c->sector_size - sumlen,
529532 sumlen - buf_len);
530
- if (err)
533
+ if (err) {
534
+ if (sumlen > buf_size)
535
+ kfree(sumptr);
531536 return err;
537
+ }
532538 }
533539 }
534540