Bug in ext2load?
Heinrich Schuchardt
xypron.glpk at gmx.de
Sat Oct 1 23:17:02 CEST 2022
On 9/30/22 15:28, Simon Glass wrote:
> +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
According to the description below the bug is not in the command but in
the file-system driver.
Function read_allocated_block() tries to implement handling of sparse
files. According to comments it is a copy from GRUB. GRUB has tried to
fix an error for sparse files with commit 1e5ed5f5f5a ("fs/ext2: Fix
handling of missing sparse extent leafs.")
Maybe we could try to upgrade to GRUB's current code.
>> 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
>>
Here is another error report for ext4:
[BUG] ext4: the load command on an EXT4 partition leads to errors due to
unaligned buffers
https://lists.denx.de/pipermail/u-boot/2021-January/437180.html
Unfortunately filesystems cbfs, fat, ext4, reiserfs, zfs don't have
maintainers.
Best regards
Heinrich
More information about the U-Boot
mailing list