From e9b93cb61f130c2b07bdc031a2487e27ca5333f1 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 26 Apr 2024 10:44:18 +0200 Subject: MHR-16: NewBoot - BDiskFormatter and QR. Signed-off-by: Amlal El Mahrouss --- Private/NewBoot/BootKit/BootKit.hxx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'Private/NewBoot/BootKit') diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index b3a81160..76bfbfb0 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -213,6 +213,7 @@ public: /// @retval False failed to format. Boolean Format(const char* partName, BFileDescriptor* fileBlobs, SizeT blobCount); + /// @brief check if partition is good. operator bool() noexcept { fDiskDev.Leak().mBase = (kNewFSAddressAsLba); fDiskDev.Leak().mSize = BootDev::kSectorSize; @@ -228,9 +229,17 @@ public: return false; } + if (blockPart->DiskSize != this->fDiskDev.GetDiskSize()) { + EFI::ThrowError(L"Invalid-Disk-Geometry", L"Invalid disk geometry."); + } + + if (blockPart->DiskSize < 1) { + EFI::ThrowError(L"Invalid-Disk-Geometry", L"Invalid disk geometry."); + } + BTextWriter writer; - writer.Write(L"Disk Partition: ").Write(blockPart->PartitionName).Write(L" is okay.\r\n"); + writer.Write(L"Disk Partition: ").Write(blockPart->PartitionName).Write(L" is healthy.\r\n"); return true; } @@ -275,7 +284,6 @@ private: forkKind->DataOffset = (startLba + sizeof(NewCatalog) + sizeof(NewFork)); forkKind->DataSize = blob->fBlobSz; - Lba lbaStart = forkKind->DataOffset; SizeT cur = 0UL; writer.Write((catalogKind->Kind == kNewFSCatalogKindFile) ? L"New Boot: Write-File: " : @@ -288,16 +296,14 @@ private: fDiskDev.Write((Char*)forkKind, sizeof(NewFork)); - while (cur < forkKind->DataSize) { + do { this->fDiskDev.Leak().mSize = BootDev::kSectorSize; this->fDiskDev.Leak().mBase = (forkKind->DataOffset + cur); this->fDiskDev.Write((Char*)(blob->fBlob) + cur, BootDev::kSectorSize); cur += BootDev::kSectorSize; - lbaStart += BootDev::kSectorSize; - } - + } while (cur < forkKind->DataSize); /// Fork is done. -- cgit v1.2.3