* [PATCH v2] ubi: Fix failure attaching when vid_hdr offset equals to (sub)page size
@ 2023-03-04 7:42 Zhihao Cheng
2023-03-04 17:11 ` Richard Weinberger
0 siblings, 1 reply; 2+ messages in thread
From: Zhihao Cheng @ 2023-03-04 7:42 UTC (permalink / raw)
To: richard, miquel.raynal, s.hauer, george.kennedy
Cc: linux-mtd, linux-kernel, chengzhihao1, yi.zhang
Following process will make ubi attaching failed since commit
1b42b1a36fc946 ("ubi: ensure that VID header offset ... size"):
ID="0xec,0xa1,0x00,0x15" # 128M 128KB 2KB
modprobe nandsim id_bytes=$ID
flash_eraseall /dev/mtd0
modprobe ubi mtd="0,2048" # set vid_hdr offset as 2048 (one page)
(dmesg):
ubi0 error: ubi_attach_mtd_dev [ubi]: VID header offset 2048 too large.
UBI error: cannot attach mtd0
UBI error: cannot initialize UBI, error -22
Rework original solution, the key point is making sure
'vid_hdr_shift + UBI_VID_HDR_SIZE < ubi->vid_hdr_alsize',
so we should check vid_hdr_shift rather not vid_hdr_offset.
Then, ubi still support (sub)page aligined VID header offset.
Fixes: 1b42b1a36fc946 ("ubi: ensure that VID header offset ... size")
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
---
v1->v2: Convert UBI_VID_HDR_SIZE as int type.
drivers/mtd/ubi/build.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 0904eb40c95f..80803ada0528 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -666,12 +666,6 @@ static int io_init(struct ubi_device *ubi, int max_beb_per1024)
ubi->ec_hdr_alsize = ALIGN(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size);
ubi->vid_hdr_alsize = ALIGN(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size);
- if (ubi->vid_hdr_offset && ((ubi->vid_hdr_offset + UBI_VID_HDR_SIZE) >
- ubi->vid_hdr_alsize)) {
- ubi_err(ubi, "VID header offset %d too large.", ubi->vid_hdr_offset);
- return -EINVAL;
- }
-
dbg_gen("min_io_size %d", ubi->min_io_size);
dbg_gen("max_write_size %d", ubi->max_write_size);
dbg_gen("hdrs_min_io_size %d", ubi->hdrs_min_io_size);
@@ -689,6 +683,21 @@ static int io_init(struct ubi_device *ubi, int max_beb_per1024)
ubi->vid_hdr_aloffset;
}
+ /*
+ * Memory allocation for VID header is ubi->vid_hdr_alsize
+ * which is described in comments in io.c.
+ * Make sure VID header shift + UBI_VID_HDR_SIZE not exceeds
+ * ubi->vid_hdr_alsize, so that all vid header operations
+ * won't access memory out of bounds.
+ */
+ if ((ubi->vid_hdr_shift + UBI_VID_HDR_SIZE) > ubi->vid_hdr_alsize) {
+ ubi_err(ubi, "Invalid VID header offset %d, VID header shift(%d)"
+ " + VID header size(%d) > VID header aligned size(%d).",
+ ubi->vid_hdr_offset, ubi->vid_hdr_shift,
+ (int)UBI_VID_HDR_SIZE, ubi->vid_hdr_alsize);
+ return -EINVAL;
+ }
+
/* Similar for the data offset */
ubi->leb_start = ubi->vid_hdr_offset + UBI_VID_HDR_SIZE;
ubi->leb_start = ALIGN(ubi->leb_start, ubi->min_io_size);
--
2.31.1
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH v2] ubi: Fix failure attaching when vid_hdr offset equals to (sub)page size
2023-03-04 7:42 [PATCH v2] ubi: Fix failure attaching when vid_hdr offset equals to (sub)page size Zhihao Cheng
@ 2023-03-04 17:11 ` Richard Weinberger
0 siblings, 0 replies; 2+ messages in thread
From: Richard Weinberger @ 2023-03-04 17:11 UTC (permalink / raw)
To: chengzhihao1
Cc: Miquel Raynal, Sascha Hauer, George Kennedy, linux-mtd,
linux-kernel, yi zhang
----- Ursprüngliche Mail -----
> Von: "chengzhihao1" <chengzhihao1@huawei.com>
> + /*
> + * Memory allocation for VID header is ubi->vid_hdr_alsize
> + * which is described in comments in io.c.
> + * Make sure VID header shift + UBI_VID_HDR_SIZE not exceeds
> + * ubi->vid_hdr_alsize, so that all vid header operations
> + * won't access memory out of bounds.
> + */
> + if ((ubi->vid_hdr_shift + UBI_VID_HDR_SIZE) > ubi->vid_hdr_alsize) {
> + ubi_err(ubi, "Invalid VID header offset %d, VID header shift(%d)"
> + " + VID header size(%d) > VID header aligned size(%d).",
> + ubi->vid_hdr_offset, ubi->vid_hdr_shift,
> + (int)UBI_VID_HDR_SIZE, ubi->vid_hdr_alsize);
Hmm, why are you casting to int instead of using %zu as format string?
Thanks,
//richard
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-03-04 17:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-04 7:42 [PATCH v2] ubi: Fix failure attaching when vid_hdr offset equals to (sub)page size Zhihao Cheng
2023-03-04 17:11 ` Richard Weinberger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®