This pull request includes the following fixes:
* 2 real bug-fixes from Tanya for the still "experimental" UBI fastmap feature * a one-liner from Kees which hardens kernel security * a small error-path fix, where we forget to free various resources in case of failure - spotted by the "smatch" tool -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJTZ0MSAAoJECmIfjd9wqK0D5kQAI5Njzu9k56jJO9oBxLxhWpj 9JhDGbbGG3pztchYkC8+DwhfoYgmZ44xWtDT665xfto/Uqh9O5kzdhN4QB75tPmg 5paPJQjoohKTLYufDJbr3q+NLcSdLHBD2pJOSUV0d0VeE05UYSoBxrUZ0jsFE1LX 4VmJCFrKzpKIMLhjExyCTpy9yIcgZTm1t/QYxNRe5tDB7epKFPevYAg2mmc8RZQh bw2iXI6GA8tYYb9uF6pxldE2QKHPjLKzafjwF8EceGATDBXc8r4QacD6xdEvxwXF DyEylLz22Fr0BXaTuK606ffOGGQLdojLMsSkkRALrLzpS11+GCaMqP85ts4Q9yGp KEj9pk67AkMGSOXx3h0fTQZU7sAded6rmSfbwH1hGUmnGy3R9DZCxFnmXFi3ktAq z5E1i6Nz0ibdmPxzxd+gPYBX85VzZ53iXmsRj63KQFMJBcZYd5UXoifyJ1QfCy/6 9+f22UF1+6tLti//KYNeVG+9GBP0UA27BaiVw90irNPIWph3OKk+SnwQuBdH36nn ekbJNzGeStK2sk3NJJLL0Xs+QN4oliBRMk/BhgPyKXD51FkohLTtN2ihZ6EjXYD0 Q/VOmhw29ZpDaF/XoVQAMRsesKYihztdtO2bZjTHKkeg/mI+Y8CRx8v8miSxMO23 77wQyy7w+FM4FXYA7NfH =L0f1 -----END PGP SIGNATURE----- Merge tag 'upstream-3.15-rc5' of git://git.infradead.org/linux-ubifs Pull ubifs fixes from Artem Bityutskiy: "This includes the following fixes: - two real bug-fixes from Tanya for the still "experimental" UBI fastmap feature - a one-liner from Kees which hardens kernel security - a small error-path fix, where we forget to free various resources in case of failure - spotted by the 'smatch' tool" * tag 'upstream-3.15-rc5' of git://git.infradead.org/linux-ubifs: UBI: avoid workqueue format string leak UBI: fix ubi free PEBs count calculation UBI: fix error path in __wl_get_peb UBIFS: fix remount error path
This commit is contained in:
commit
cae1d2cab4
|
@ -431,7 +431,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
|
|||
* Create one workqueue per volume (per registered block device).
|
||||
* Rembember workqueues are cheap, they're not threads.
|
||||
*/
|
||||
dev->wq = alloc_workqueue(gd->disk_name, 0, 0);
|
||||
dev->wq = alloc_workqueue("%s", 0, 0, gd->disk_name);
|
||||
if (!dev->wq)
|
||||
goto out_free_queue;
|
||||
INIT_WORK(&dev->work, ubiblock_do_work);
|
||||
|
|
|
@ -671,6 +671,8 @@ static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi)
|
|||
|
||||
e = find_wl_entry(ubi, &ubi->free, WL_FREE_MAX_DIFF);
|
||||
self_check_in_wl_tree(ubi, e, &ubi->free);
|
||||
ubi->free_count--;
|
||||
ubi_assert(ubi->free_count >= 0);
|
||||
rb_erase(&e->u.rb, &ubi->free);
|
||||
|
||||
return e;
|
||||
|
@ -684,6 +686,9 @@ int ubi_wl_get_peb(struct ubi_device *ubi)
|
|||
peb = __wl_get_peb(ubi);
|
||||
spin_unlock(&ubi->wl_lock);
|
||||
|
||||
if (peb < 0)
|
||||
return peb;
|
||||
|
||||
err = ubi_self_check_all_ff(ubi, peb, ubi->vid_hdr_aloffset,
|
||||
ubi->peb_size - ubi->vid_hdr_aloffset);
|
||||
if (err) {
|
||||
|
@ -1068,6 +1073,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
|
|||
|
||||
/* Give the unused PEB back */
|
||||
wl_tree_add(e2, &ubi->free);
|
||||
ubi->free_count++;
|
||||
goto out_cancel;
|
||||
}
|
||||
self_check_in_wl_tree(ubi, e1, &ubi->used);
|
||||
|
|
|
@ -1556,7 +1556,7 @@ static int ubifs_remount_rw(struct ubifs_info *c)
|
|||
if (c->space_fixup) {
|
||||
err = ubifs_fixup_free_space(c);
|
||||
if (err)
|
||||
return err;
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = check_free_space(c);
|
||||
|
|
Loading…
Reference in New Issue