ubi: Fix failure attaching when vid_hdr offset equals to (sub)page size
authorZhihao Cheng <chengzhihao1@huawei.com>
Mon, 6 Mar 2023 01:33:08 +0000 (09:33 +0800)
committerRichard Weinberger <richard@nod.at>
Wed, 29 Mar 2023 21:32:57 +0000 (23:32 +0200)
commit1e020e1b96afdecd20680b5b5be2a6ffc3d27628
treeae4d32ca3ed9dc1cefab7c40348cb5f96a9e79f0
parentf773f0a331d6c41733b17bebbc1b6cae12e016f5
ubi: Fix failure attaching when vid_hdr offset equals to (sub)page size

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>
Tested-by: Nicolas Schichan <nschichan@freebox.fr>
Tested-by: Miquel Raynal <miquel.raynal@bootlin.com> # v5.10, v4.19
Signed-off-by: Richard Weinberger <richard@nod.at>
drivers/mtd/ubi/build.c