kernel: don't auto attach ubi on read error

With a10a204aab ("kernel: make ubi auto-attach check for a tar file
magic") the check for the magic was added without considering a failing
mtd_read(). If the read fails, no check is done and the mount code is
called straight away.

Failing with an error message for such cases seems to me the cleaner way,
as it would allow to spot hidden/workaround issues.

Signed-off-by: Mathias Kresin <dev@kresin.me>
(backported from 3716b5e4e6)
(rebased patches)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
openwrt-18.06
Mathias Kresin 2018-07-08 23:18:15 +02:00 committed by Jo-Philipp Wich
parent e694526264
commit 031d5cf248
2 changed files with 20 additions and 10 deletions

View File

@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -1172,6 +1172,68 @@ static struct mtd_info * __init open_mtd
@@ -1172,6 +1172,73 @@ static struct mtd_info * __init open_mtd
return mtd;
}
@ -44,10 +44,15 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ }
+ }
+
+ /* check for a valid ubi magic if read from flash was successful */
+ /* check if the read from flash was successful */
+ err = mtd_read(mtd, offset, 4, &len, (void *) magic);
+ if ((!err || mtd_is_bitflip(err)) &&
+ len == 4 && strncmp(magic, "UBI#", 4)) {
+ if ((err && !mtd_is_bitflip(err)) || len != 4) {
+ pr_err("UBI error: unable to read from mtd%d\n", mtd->index);
+ goto cleanup;
+ }
+
+ /* check for a valid ubi magic */
+ if (strncmp(magic, "UBI#", 4)) {
+ pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
+ goto cleanup;
+ }
@ -77,7 +82,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static int __init ubi_init(void)
{
int err, i, k;
@@ -1255,6 +1317,12 @@ static int __init ubi_init(void)
@@ -1255,6 +1322,12 @@ static int __init ubi_init(void)
}
}

View File

@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -1226,6 +1226,68 @@ static struct mtd_info * __init open_mtd
@@ -1226,6 +1226,73 @@ static struct mtd_info * __init open_mtd
return mtd;
}
@ -44,10 +44,15 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ }
+ }
+
+ /* check for a valid ubi magic if read from flash was successful */
+ /* check if the read from flash was successful */
+ err = mtd_read(mtd, offset, 4, &len, (void *) magic);
+ if ((!err || mtd_is_bitflip(err)) &&
+ len == 4 && strncmp(magic, "UBI#", 4)) {
+ if ((err && !mtd_is_bitflip(err)) || len != 4) {
+ pr_err("UBI error: unable to read from mtd%d\n", mtd->index);
+ goto cleanup;
+ }
+
+ /* check for a valid ubi magic */
+ if (strncmp(magic, "UBI#", 4)) {
+ pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
+ goto cleanup;
+ }
@ -77,7 +82,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static int __init ubi_init(void)
{
int err, i, k;
@@ -1309,6 +1371,12 @@ static int __init ubi_init(void)
@@ -1309,6 +1376,12 @@ static int __init ubi_init(void)
}
}