Bug in ext2load?

Simon Glass sjg at chromium.org
Fri Sep 30 15:28:47 CEST 2022


+Heinrich Schuchardt

On Thu, 29 Sept 2022 at 16:31, Gary Johnson <garyjohn at spocom.com> wrote:
>
> I think I've found a bug in the ext2load command.  When the file
> being read is a sparse file, the command fails as in this example.
>
>     => ext2load usb 0:1 $load_addr firmware_ls2088ardb_norboot.img
>     fs_devread read outside partition 60063712
>     Failed to load 'firmware_ls2088ardb_norboot.img'
>
> However, if the same image file is copied to the USB flash drive on
> the build machine so that it is not sparse, that is, with "cp
> --sparse=never ...", then the ext2load command on the target machine
> succeeds.
>
> I think the problem may be in the ext4fs_read_file() command in
> fs/ext4/ext4fs.c.  That is the only function I see in the path from
> the ext2load command to the error message that does anything
> explicitly with blocks.  Also, this comment at the top of that
> function suggests that someone tried to optimize the reading of the
> file and may have missed some sparse-file condition.
>
>     /*
>      * Taken from openmoko-kernel mailing list: By Andy green
>      * Optimized read file API : collects and defers contiguous sector
>      * reads into one potentially more efficient larger sequential read action
>      */
>
> However, I did not try to debug the problem further, as using "cp
> --sparse=never" is an adequate workaround and I have more pressing
> work to do.
>
> It appears that the ext2load command runs off the end of the list of
> blocks in the inode and tries to read beyond the end of the
> partition.
>
>     => usb storage
>       Device 0: Vendor:  USB Rev: 1.00 Prod:  SanDisk 3.2Gen1
>                 Type: Removable Hard Disk
>                 Capacity: 29328.0 MB = 28.6 GB (60063744 x 512)
>
> Note that the drive capacity is 32 sectors less than the sector
> reported in the error message.  According to the part list command,
> the partition starts at sector 32, and the number of sectors
> available matches the number reported in the error message, so this
> adds up.
>
>     => part list usb 0
>
>     Partition Map for USB device 0  --   Partition Type: DOS
>
>     Part    Start Sector    Num Sectors     UUID            Type
>       1     32              60063712        eca4cd09-01     83
>
> This error happens with two versions of U-Boot:
>
>     U-Boot 2016.092.0+ga06b209 (Mar 30 2017 - 01:15:01 +0800)
>     U-Boot 2021.04-ge2eba0cd58 (Aug 27 2021 - 22:23:21 +0800)
>
> The last change to fs/ext4/ext4fs.c appears to have been made at
> commit e6f6f9e648 (2020-05-10).
>
> Let me know if you need any addtional information or if I missed
> something and am wrong about all this.
>
> Regards,
> Gary
>


More information about the U-Boot mailing list