]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 4 Apr 2022 10:18:40 +0000 (12:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 4 Apr 2022 10:18:40 +0000 (12:18 +0200)
added patches:
ubi-fastmap-return-error-code-if-memory-allocation-fails-in-add_aeb.patch

queue-4.9/series
queue-4.9/ubi-fastmap-return-error-code-if-memory-allocation-fails-in-add_aeb.patch [new file with mode: 0644]

index 33edab03a4009fad41454b1c9bc988329b044b65..723c70637e755aec23c7cb1b7e275f2134dfdbe0 100644 (file)
@@ -155,3 +155,4 @@ pinctrl-pinconf-generic-print-arguments-for-bias-pull.patch
 acpi-cppc-avoid-out-of-bounds-access-when-parsing-_cpc-data.patch
 mm-mmap-return-1-from-stack_guard_gap-__setup-handler.patch
 mm-memcontrol-return-1-from-cgroup.memory-__setup-handler.patch
+ubi-fastmap-return-error-code-if-memory-allocation-fails-in-add_aeb.patch
diff --git a/queue-4.9/ubi-fastmap-return-error-code-if-memory-allocation-fails-in-add_aeb.patch b/queue-4.9/ubi-fastmap-return-error-code-if-memory-allocation-fails-in-add_aeb.patch
new file mode 100644 (file)
index 0000000..c6cb310
--- /dev/null
@@ -0,0 +1,86 @@
+From c3c07fc25f37c157fde041b3a0c3dfcb1590cbce Mon Sep 17 00:00:00 2001
+From: Zhihao Cheng <chengzhihao1@huawei.com>
+Date: Mon, 27 Dec 2021 11:22:42 +0800
+Subject: ubi: fastmap: Return error code if memory allocation fails in add_aeb()
+
+From: Zhihao Cheng <chengzhihao1@huawei.com>
+
+commit c3c07fc25f37c157fde041b3a0c3dfcb1590cbce upstream.
+
+Abort fastmap scanning and return error code if memory allocation fails
+in add_aeb(). Otherwise ubi will get wrong peb statistics information
+after scanning.
+
+Fixes: dbb7d2a88d2a7b ("UBI: Add fastmap core")
+Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/mtd/ubi/fastmap.c |   28 +++++++++++++++++++---------
+ 1 file changed, 19 insertions(+), 9 deletions(-)
+
+--- a/drivers/mtd/ubi/fastmap.c
++++ b/drivers/mtd/ubi/fastmap.c
+@@ -478,7 +478,9 @@ static int scan_pool(struct ubi_device *
+                       if (err == UBI_IO_FF_BITFLIPS)
+                               scrub = 1;
+-                      add_aeb(ai, free, pnum, ec, scrub);
++                      ret = add_aeb(ai, free, pnum, ec, scrub);
++                      if (ret)
++                              goto out;
+                       continue;
+               } else if (err == 0 || err == UBI_IO_BITFLIPS) {
+                       dbg_bld("Found non empty PEB:%i in pool", pnum);
+@@ -648,8 +650,10 @@ static int ubi_attach_fastmap(struct ubi
+               if (fm_pos >= fm_size)
+                       goto fail_bad;
+-              add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum),
+-                      be32_to_cpu(fmec->ec), 0);
++              ret = add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum),
++                            be32_to_cpu(fmec->ec), 0);
++              if (ret)
++                      goto fail;
+       }
+       /* read EC values from used list */
+@@ -659,8 +663,10 @@ static int ubi_attach_fastmap(struct ubi
+               if (fm_pos >= fm_size)
+                       goto fail_bad;
+-              add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
+-                      be32_to_cpu(fmec->ec), 0);
++              ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
++                            be32_to_cpu(fmec->ec), 0);
++              if (ret)
++                      goto fail;
+       }
+       /* read EC values from scrub list */
+@@ -670,8 +676,10 @@ static int ubi_attach_fastmap(struct ubi
+               if (fm_pos >= fm_size)
+                       goto fail_bad;
+-              add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
+-                      be32_to_cpu(fmec->ec), 1);
++              ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
++                            be32_to_cpu(fmec->ec), 1);
++              if (ret)
++                      goto fail;
+       }
+       /* read EC values from erase list */
+@@ -681,8 +689,10 @@ static int ubi_attach_fastmap(struct ubi
+               if (fm_pos >= fm_size)
+                       goto fail_bad;
+-              add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum),
+-                      be32_to_cpu(fmec->ec), 1);
++              ret = add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum),
++                            be32_to_cpu(fmec->ec), 1);
++              if (ret)
++                      goto fail;
+       }
+       ai->mean_ec = div_u64(ai->ec_sum, ai->ec_count);