]> git.baikalelectronics.ru Git - uboot.git/commit
EFI: Fix ReadBlocks API reading incorrect sector for UCLASS_PARTITION devices
authorPaul Barbieri <plb365@gmail.com>
Thu, 30 Jun 2022 11:02:04 +0000 (07:02 -0400)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sat, 2 Jul 2022 12:19:12 +0000 (14:19 +0200)
commit3d858c1f6e934b536dcc8cef752b4dce2ba6b943
tree11d8e3b55ca47d4bbcaaab11fddcd560f82f41db
parent697c8ffb79a4955bcebb97ff872390558bfb9301
EFI: Fix ReadBlocks API reading incorrect sector for UCLASS_PARTITION devices

The requsted partition disk sector incorrectly has the parition start
sector added in twice for UCLASS_PARTITION devices. The efi_disk_rw_blocks()
routine adds the diskobj->offset to the requested lba. When the device
is a UCLASS_PARTITION, the dev_read() or dev_write() routine is called
which adds part-gpt_part_info.start. This causes I/O to the wrong sector.

Takahiro Akashi suggested removing the offset field from the efi_disk_obj
structure since disk-uclass.c handles the partition start biasing. Device
types other than UCLASS_PARTITION set the diskobj->offset field to zero
which makes the field unnecessary. This change removes the offset field
from the structure and removes all references from the code which is
isolated to the lib/efi_loader/efi_disk.c module.

This change also adds a test for the EFI ReadBlocks() API in the EFI
selftest code. There is already a test for reading a FAT file. The new
test uses ReadBlocks() to read the same "disk" block and compare it to
the data read from the file system API.

Signed-Off-by: Paul Barbieri <plb365@gmail.com>
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
lib/efi_loader/efi_disk.c
lib/efi_selftest/efi_selftest_block_device.c