MFC part of r273865: fix boot1.efi for block size != 512

r273865 is part of the work for supporting 4Kn drives, but it turns out
the underlying bug can actually cause corruption of the UEFI system
table in any case where block size is not 512.

Relevant portion of the original commit message:

  convert boot1.efi to corrrectly calculate the lba for what the
  media reports and convert the size based on what FreeBSD uses.
  existing code would use the 512 byte lba and convert the
  using 4K byte size.

PR:		197881
Reviewed by:	Chris Ruffin
This commit is contained in:
emaste 2015-02-24 22:11:07 +00:00
parent 9534a4a472
commit 224ab7ed88

View File

@ -168,9 +168,12 @@ static int
dskread(void *buf, u_int64_t lba, int nblk)
{
EFI_STATUS status;
int size;
lba = lba / (bootdev->Media->BlockSize / DEV_BSIZE);
size = nblk * DEV_BSIZE;
status = bootdev->ReadBlocks(bootdev, bootdev->Media->MediaId, lba,
nblk * bootdev->Media->BlockSize, buf);
size, buf);
if (EFI_ERROR(status))
return (-1);