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:
parent
9534a4a472
commit
224ab7ed88
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user