[U-Boot] [Bug & Question] ubifs does not understand ".." in file path ?

Richard Weinberger
2018-07-13T08:08:19Z

Am Freitag, 13. Juli 2018, 10:00:23 CEST schrieb Marek Vasut:
> On 07/13/2018 09:44 AM, Heiko Schocher wrote:
> > Hello Masahiro,
> >
> > Am 13.07.2018 um 06:44 schrieb Masahiro Yamada:
> >> Hi.
> >>
> >>
> >> I was playing around with the ditro-boot on NAND + UBI.
> >>
> >> I was hit by a problem when loading files from ubifs.
> >>
> >>
> >> My 'extlinux.conf' script looks like this:
> >>
> >> ---------------------------------
> >> menu title UniPhier Boot Options.
> >>
> >> timeout 5
> >>
> >> default UniPhier
> >>
> >> label UniPhier
> >> kernel ../Image
> >> initrd ../rootfs.cpio.gz
> >> fdtdir ..
> >> ----------------------------------
> >>
> >>
> >> As doc/README.distro says,
> >> 'extlinux.conf' is generally located in 'extlinux' subdirectory.
> >>
> >> So, the paths to kernel, initrd, fdt usually contain '..'
> >>
> >> This totally works fine when loading files
> >> from a FAT-formated MMC device.
> >>
> >> 'run bootcmd_mmc0' successfully boots Linus
> >> in the disto-boot manner.
> >>
> >>
> >>
> >> However, 'run bootcmd_ubifs0' fails to boot.
> >>
> >>
> >> => run bootcmd_ubifs0
> >> ubi0: attaching mtd1
> >> ubi0: scanning is finished
> >> ubi0: attached mtd1 (name "mtd=1", size 1023 MiB)
> >> ubi0: PEB size: 262144 bytes (256 KiB), LEB size: 253952 bytes
> >> ubi0: min./max. I/O unit sizes: 4096/4096, sub-page size 4096
> >> ubi0: VID header offset: 4096 (aligned 4096), data offset: 8192
> >> ubi0: good PEBs: 4088, bad PEBs: 4, corrupted PEBs: 0
> >> ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
> >> ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence
> >> number: 1407739552
> >> ubi0: available PEBs: 0, total reserved PEBs: 4088, PEBs reserved for
> >> bad PEB handling: 76
> >> UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "boot",
> >> R/O mode
> >> UBIFS (ubi0:0): LEB size: 253952 bytes (248 KiB), min./max. I/O unit
> >> sizes: 4096 bytes/4096 bytes
> >> UBIFS (ubi0:0): FS size: 1014284288 bytes (967 MiB, 3994 LEBs),
> >> journal size 33521664 bytes (31 MiB, 132 LEBs)
> >> UBIFS (ubi0:0): reserved for root: 4952683 bytes (4836 KiB)
> >> UBIFS (ubi0:0): media format: w5/r0 (latest is w4/r0), UUID
> >> cc8f68da-030d-408c-a91f-f8cc195a2946, small LPT model
> >> Scanning ubi 0:...
> >> Found /boot/extlinux/extlinux.conf
> >> Retrieving file: /boot/extlinux/extlinux.conf
> >> 148 bytes read in 1 ms (144.5 KiB/s)
> >> UniPhier Boot Options.
> >> 1: UniPhier
> >> Enter choice: 1: UniPhier
> >> Retrieving file: /boot/extlinux/../rootfs.cpio.gz
> >> Skipping UniPhier for failure retrieving initrd
> >> SCRIPT FAILED: continuing...
> >>
> >>
> >>
> >>
> >> The boot log says
> >> it succeeded in loading '/boot/extlinux/extlinux.conf'
> >> but failed in loading '/boot/extlinux/../rootfs.cpio.gz'
> >>
> >>
> >>
> >> In my quick experiments,
> >>
> >> load '/boot/extlinux/extlinux.conf' -> SUCCESS
> >> load '/boot/extlinux/../rootfs.cpio.gz' -> FAILURE
> >> load '/boot/rootfs.cpio.gz' -> SUCCESS
> >> load '/boot/extlinux/../Image' -> FAILURE
> >> load '/boot/Image' -> SUCCESS
> >> load '/boot/extlinux/../uniphier-ld20-ref.dtb' -> FAILURE
> >> load '/boot/uniphier-ld20-ref.dtb' -> SUCCESS
> >>
> >>
> >>
> >> From the test results above,
> >> my conclusion is loading a file path that contains '..' is not working.
> >>
> >>
> >> Not sure where the root cause is.
> >> Anybody who has insight about this?
> >
> > No idea, need to try it, but may
> >
> > fs/ubifs/ubifs.c ubifs_findfile() has a problem with ".." ?
>
> CCing Richard, btw ubifs in U-Boot is completely broken.

Erm, ".." handling is not the business of a filesystem.
VFS does that.

Thanks,
//richard