Commit 7b07c2bc authored by Artem Bityutskiy's avatar Artem Bityutskiy Committed by Ben Hutchings

UBI: fix a horrible memory deallocation bug

commit 78b495c3 upstream.

UBI was mistakingly using 'kfree()' instead of 'kmem_cache_free()' when
freeing "attach eraseblock" structures in vtbl.c. Thankfully, this happened
only when we were doing auto-format, so many systems were unaffected. However,
there are still many users affected.

It is strange, but the system did not crash and nothing bad happened when
the SLUB memory allocator was used. However, in case of SLOB we observed an
crash right away.

This problem was introduced in 2.6.39 by commit
"6c1e875c UBI: add slab cache for ubi_scan_leb objects"

A note for stable trees:
  Because variable were renamed, this won't cleanly apply to older kernels.
  Changing names like this should help:
	1. ai -> si
	2. aeb_slab_cache -> seb_slab_cache
	3. new_aeb -> new_seb
Reported-by: default avatarRichard Genoud <richard.genoud@gmail.com>
Tested-by: default avatarRichard Genoud <richard.genoud@gmail.com>
Tested-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
[bwh: Backported to 3.2: aeb_slab_cache was actually named scan_leb_slab]
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 33c5063f
......@@ -346,7 +346,7 @@ static int create_vtbl(struct ubi_device *ubi, struct ubi_scan_info *si,
*/
err = ubi_scan_add_used(ubi, si, new_seb->pnum, new_seb->ec,
vid_hdr, 0);
kfree(new_seb);
kmem_cache_free(si->scan_leb_slab, new_seb);
ubi_free_vid_hdr(ubi, vid_hdr);
return err;
......@@ -359,7 +359,7 @@ static int create_vtbl(struct ubi_device *ubi, struct ubi_scan_info *si,
list_add(&new_seb->u.list, &si->erase);
goto retry;
}
kfree(new_seb);
kmem_cache_free(si->scan_leb_slab, new_seb);
out_free:
ubi_free_vid_hdr(ubi, vid_hdr);
return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment