[U-Boot] [BUG] efi_driver: crash while reading from iSCSI drive

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Oct 22 20:29:09 UTC 2019


The patch

commit 867400677cda0fac4a411f1549fe3a61bb5ed172
efi_loader: disk: install FILE_SYSTEM_PROTOCOL only if available

breaks booting my Pine A64 LTS board via iPXE and GRUB. But I assume
this is not at the base of the problem.

My iSCSI drive is partitioned like this:

Device        Boot    Start      End  Sectors  Size Id Type
pine-a64-lts1          2048   194559   192512   94M ef EFI   vfat
pine-a64-lts2 *      194560  2148351  1953792  954M 83 Linux ext2
pine-a64-lts3       2148352 25585663 23437312 11.2G 83 Linux ext4
pine-a64-lts4      25585664 67106815 41521152 19.8G 83 Linux ext4

Looking at the debug output below the following questions arise:

Why is ext2 not recognized as a file system?
Why is the system crashing when trying to read 1024 blocks from the ext4
partition?

.config contains CONFIG_FS_EXT4=y

EFI: efi_bl_bind: handle 00000000b9f94560, interface 00000000b8e9f7f8
EFI: efi_bl_read: read 'efiblk#0', from block 0, 1 blocks
EFI: Call: io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: 0 returned by io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: efi_bl_read: r = 0
EFI: efi_bl_bind: block device 'efiblk#0' created
EFI: efi_bl_read: read 'efiblk#0', from block 2048, 1 blocks
EFI: Call: io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: 0 returned by io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: efi_bl_read: r = 0
lib/efi_loader/efi_disk.c(279) efi_fs_exists: 0 returned by
fs_set_blk_dev_with_part(desc, 1)
EFI: efi_bl_read: read 'efiblk#0', from block 194560, 1 blocks
EFI: Call: io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: 0 returned by io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: efi_bl_read: r = 0
EFI: efi_bl_read: read 'efiblk#0', from block 195584, 1024 blocks
EFI: Call: io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: 0 returned by io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: efi_bl_read: r = 0
** Unrecognized filesystem type **
lib/efi_loader/efi_disk.c(279) efi_fs_exists: -1 returned by
fs_set_blk_dev_with_part(desc, 2)
EFI: efi_bl_read: read 'efiblk#0', from block 2148352, 1 blocks
EFI: Call: io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: 0 returned by io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)
EFI: efi_bl_read: r = 0
EFI: efi_bl_read: read 'efiblk#0', from block 2149376, 1024 blocks
EFI: Call: io->read_blocks( io, io->media->media_id, (u64)blknr,
(efi_uintn_t)blkcnt * (efi_uintn_t)io->media->block_size, buffer)

"Synchronous Abort" handler, esr 0x02000000

elr: ffffffff8c0a6028 lr : ffffffff8c0a6000 (reloc)
elr: 0000000000000028 lr : 0000000000000000
x0 : 00000000b9f918f8 x1 : 00000000b9f31004
x2 : 00000000b9f918f8 x3 : 00000000b9f918f8
x4 : 00000000b9f918f8 x5 : 00000000b9f918f8
x6 : 00000000b9f918f8 x7 : 0000000000000000
x8 : 00000000b9f918f8 x9 : 00000000b8ea1038
x10: 0000000000000001 x11: 0000000019100bb0
x12: 0000000000000000 x13: 0000000000000001
x14: 0000000000000002 x15: 0000000000000003
x16: 00000000000000c8 x17: 00000000b9f918f8
x18: 00000000b9f31c30 x19: 00000000b9f918f8
x20: 00000000b8e9ddd0 x21: 00000000b8e99000
x22: 00000000b9f31008 x23: 00000000b9f3105a
x24: 00000000b9f31068 x25: 00000000b9f31110
x26: 0000000000000000 x27: 0000000000000000
x28: 0000000000000000 x29: 00000000b9f31160

Code: ea000011 ea000000 ea000013 eafffffe (e3a00001)

Looks like we jumped into nowhere land:

All code
========
    0:   ea000011        ands    x17, x0, x0
    4:   ea000000        ands    x0, x0, x0
    8:   ea000013        ands    x19, x0, x0
    c:   eafffffe        bics    x30, xzr, xzr, ror #63
   10:*  e3a00001        .inst   0xe3a00001 ; undefined          <--
trapping instruction

Best regards

Heinrich


More information about the U-Boot mailing list