* [edk2-test][Patch 1/1] uefi-sct:SctPkg:Fix underflow in EraseBlocks test
@ 2019-03-11 8:08 Eric Jin
2019-03-18 18:58 ` Supreeth Venkatesh
0 siblings, 1 reply; 2+ messages in thread
From: Eric Jin @ 2019-03-11 8:08 UTC (permalink / raw)
To: edk2-devel
The test case does not handle properly when
the 'EraseLengthGranularity' field of an Erase
Block Protocol instance is 1(SD device).
The Size parameter will underflow and become a
very large value, cause to exceed the last LBA.
The fix considers this case.
Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Jin <eric.jin@intel.com>
---
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c | 208 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------
1 file changed, 105 insertions(+), 103 deletions(-)
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c
index bc16a4738b4f..cbf43e1d59d7 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c
@@ -1,7 +1,7 @@
/** @file
Copyright 2017 Unified EFI, Inc.<BR>
- Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -128,8 +128,8 @@ BBTestEraseBlocksFunctionTest (
// allocate aligned buffer
//
Buffer1 = AllocateAlignedPool(
- EfiBootServicesData,
- BufferSize,
+ EfiBootServicesData,
+ BufferSize,
IoAlign
);
if (Buffer1 == NULL) {
@@ -147,8 +147,8 @@ BBTestEraseBlocksFunctionTest (
}
Buffer2 = AllocateAlignedPool(
- EfiBootServicesData,
- BufferSize,
+ EfiBootServicesData,
+ BufferSize,
IoAlign
);
if (Buffer2 == NULL) {
@@ -166,7 +166,7 @@ BBTestEraseBlocksFunctionTest (
return EFI_OUT_OF_RESOURCES;
}
- if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock != 0)) {
+ if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock != 0)) {
//
// Read the data at first with ReadBlocks
//
@@ -189,10 +189,10 @@ BBTestEraseBlocksFunctionTest (
}
//
- // Write 1
+ // Write 1
//
for (Index1 = 0; Index1 < BufferSize; Index1++) {
- Buffer2[Index1] = 1;
+ Buffer2[Index1] = 1;
}
Status = BlockIo->WriteBlocks (BlockIo, MediaId, Lba, BufferSize, (VOID*)Buffer2);
@@ -211,57 +211,59 @@ BBTestEraseBlocksFunctionTest (
FreeAlignedPool(Buffer1);
FreeAlignedPool(Buffer2);
goto BlockIo2;
- }
+ }
// Erase Blocks with non-EraseLengthGranularity blocks
- Token.Event = NULL;
- Token.TransactionStatus = EFI_NOT_READY;
- EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId, Lba+1, &Token, BufferSize - 2 * BlockSize);
-
- // Read the data with 0, the first/last block should not be erased
- ReadStatus = BlockIo->ReadBlocks (BlockIo, MediaId, Lba, BufferSize, (VOID*)Buffer2);
- if (ReadStatus == EFI_SUCCESS) {
- for (Index1 = 0; Index1 < BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
- IsZero1 = FALSE;
- break;
+ if (BufferSize > 2 * BlockSize) {
+ Token.Event = NULL;
+ Token.TransactionStatus = EFI_NOT_READY;
+
+ EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId, Lba+1, &Token, BufferSize - 2 * BlockSize);
+
+ // Read the data with 0, the first/last block should not be erased
+ ReadStatus = BlockIo->ReadBlocks (BlockIo, MediaId, Lba, BufferSize, (VOID*)Buffer2);
+ if (ReadStatus == EFI_SUCCESS) {
+ for (Index1 = 0; Index1 < BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0) {
+ IsZero1 = FALSE;
+ break;
+ }
}
- }
- for (Index1 = BlockSize; Index1 < BufferSize - BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
- IsZero2 = FALSE;
- break;
+ for (Index1 = BlockSize; Index1 < BufferSize - BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0) {
+ IsZero2 = FALSE;
+ break;
+ }
}
- }
- for (Index1 = BufferSize - BlockSize; Index1 < BufferSize; Index1++) {
- if (Buffer2[Index1] != 0) {
- IsZero3 = FALSE;
- break;
+ for (Index1 = BufferSize - BlockSize; Index1 < BufferSize; Index1++) {
+ if (Buffer2[Index1] != 0) {
+ IsZero3 = FALSE;
+ break;
+ }
}
- }
- if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) && (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
- AssertionType = EFI_TEST_ASSERTION_PASSED;
- else
- AssertionType = EFI_TEST_ASSERTION_FAILED;
-
-
- StandardLib->RecordAssertion (
- StandardLib,
- AssertionType,
- gEraseBlockBBTestFunctionAssertionGuid003,
- L"EraseBlocks - EraseBlocks for testing, the first/last block should not be erased",
- L"%a:%d:EraseBlocks Status - %r, IsZero1 - %d, IsZero2 - %d, IsZero3 - %d",
- __FILE__,
- (UINTN)__LINE__,
- Status,
- IsZero1, IsZero2, IsZero3
- );
+ if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) && (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
+ AssertionType = EFI_TEST_ASSERTION_PASSED;
+ else
+ AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+ StandardLib->RecordAssertion (
+ StandardLib,
+ AssertionType,
+ gEraseBlockBBTestFunctionAssertionGuid003,
+ L"EraseBlocks - EraseBlocks for testing, the first/last block should not be erased",
+ L"%a:%d:EraseBlocks Status - %r, IsZero1 - %d, IsZero2 - %d, IsZero3 - %d",
+ __FILE__,
+ (UINTN)__LINE__,
+ EraseStatus,
+ IsZero1, IsZero2, IsZero3
+ );
+
+ }
}
-
//
// Erase Blocks with the EraseLengthGranularity blocks
//
@@ -283,7 +285,7 @@ BBTestEraseBlocksFunctionTest (
}
if ((EraseStatus == EFI_SUCCESS) && (IsZero == TRUE))
- AssertionType = EFI_TEST_ASSERTION_PASSED;
+ AssertionType = EFI_TEST_ASSERTION_PASSED;
else
AssertionType = EFI_TEST_ASSERTION_FAILED;
@@ -297,7 +299,7 @@ BBTestEraseBlocksFunctionTest (
(UINTN)__LINE__,
Status,
IsZero
- );
+ );
}
@@ -305,7 +307,7 @@ BBTestEraseBlocksFunctionTest (
//
// Restore the data with WriteBlocks and FlushBlocks
//
- WriteStatus = BlockIo->WriteBlocks (BlockIo, MediaId, Lba, BufferSize, (VOID*)Buffer1);
+ WriteStatus = BlockIo->WriteBlocks (BlockIo, MediaId, Lba, BufferSize, (VOID*)Buffer1);
FlushStatus = EFI_SUCCESS;
if (WriteCaching == TRUE)
FlushStatus = BlockIo->FlushBlocks(BlockIo);
@@ -325,8 +327,8 @@ BBTestEraseBlocksFunctionTest (
FreeAlignedPool(Buffer1);
FreeAlignedPool(Buffer2);
- }
- }
+ }
+ }
BlockIo2:
@@ -361,8 +363,8 @@ BlockIo2:
// allocate aligned buffer
//
Buffer1 = AllocateAlignedPool(
- EfiBootServicesData,
- BufferSize,
+ EfiBootServicesData,
+ BufferSize,
IoAlign
);
if (Buffer1 == NULL) {
@@ -380,8 +382,8 @@ BlockIo2:
}
Buffer2 = AllocateAlignedPool(
- EfiBootServicesData,
- BufferSize,
+ EfiBootServicesData,
+ BufferSize,
IoAlign
);
if (Buffer2 == NULL) {
@@ -399,7 +401,7 @@ BlockIo2:
return EFI_OUT_OF_RESOURCES;
}
- if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock != 0)) {
+ if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock != 0)) {
BlockIo2Token.Event = NULL;
BlockIo2Token.TransactionStatus = EFI_NOT_READY;
@@ -453,13 +455,13 @@ BlockIo2:
//
// Erase Blocks with non EraseLengthGranularity blocks
//
+ if (BufferSize > 2 * BlockSize) {
+ Token.Event = NULL;
+ Token.TransactionStatus = EFI_NOT_READY;
- Token.Event = NULL;
- Token.TransactionStatus = EFI_NOT_READY;
+ EnterEvent = 0;
- EnterEvent = 0;
-
- Status = gtBS->CreateEvent (
+ Status = gtBS->CreateEvent (
EVT_NOTIFY_SIGNAL,
TPL_CALLBACK,
(EFI_EVENT_NOTIFY) NotifyFunction,
@@ -467,8 +469,8 @@ BlockIo2:
&Token.Event
);
- if (EFI_ERROR (Status)) {
- StandardLib->RecordAssertion (
+ if (EFI_ERROR (Status)) {
+ StandardLib->RecordAssertion (
StandardLib,
EFI_TEST_ASSERTION_FAILED,
gTestGenericFailureGuid,
@@ -478,46 +480,46 @@ BlockIo2:
(UINTN)__LINE__,
Status
);
- FreeAlignedPool(Buffer1);
- FreeAlignedPool(Buffer2);
- goto End;
- }
-
- EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId, Lba+1, &Token, BufferSize - 2 * BlockSize);
-
- while(Token.TransactionStatus == EFI_NOT_READY);
-
- // Read the data with 0, the first/last block should not be erased
- ReadStatus = BlockIo2->ReadBlocksEx (BlockIo2, MediaId, Lba, &BlockIo2Token, BufferSize, (VOID*)Buffer2);
- if (ReadStatus == EFI_SUCCESS) {
- for (Index1 = 0; Index1 < BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
- IsZero1 = FALSE;
- break;
- }
+ FreeAlignedPool(Buffer1);
+ FreeAlignedPool(Buffer2);
+ goto End;
}
- for (Index1 = BlockSize; Index1 < BufferSize - BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
- IsZero2 = FALSE;
- break;
+ EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId, Lba+1, &Token, BufferSize - 2 * BlockSize);
+
+ while(Token.TransactionStatus == EFI_NOT_READY);
+
+ // Read the data with 0, the first/last block should not be erased
+ ReadStatus = BlockIo2->ReadBlocksEx (BlockIo2, MediaId, Lba, &BlockIo2Token, BufferSize, (VOID*)Buffer2);
+ if (ReadStatus == EFI_SUCCESS) {
+ for (Index1 = 0; Index1 < BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0) {
+ IsZero1 = FALSE;
+ break;
+ }
}
- }
- for (Index1 = BufferSize - BlockSize; Index1 < BufferSize; Index1++) {
- if (Buffer2[Index1] != 0) {
- IsZero3 = FALSE;
- break;
+ for (Index1 = BlockSize; Index1 < BufferSize - BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0) {
+ IsZero2 = FALSE;
+ break;
+ }
}
- }
- if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) && (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
- AssertionType = EFI_TEST_ASSERTION_PASSED;
- else
- AssertionType = EFI_TEST_ASSERTION_FAILED;
+ for (Index1 = BufferSize - BlockSize; Index1 < BufferSize; Index1++) {
+ if (Buffer2[Index1] != 0) {
+ IsZero3 = FALSE;
+ break;
+ }
+ }
+
+ if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) && (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
+ AssertionType = EFI_TEST_ASSERTION_PASSED;
+ else
+ AssertionType = EFI_TEST_ASSERTION_FAILED;
+
-
- StandardLib->RecordAssertion (
+ StandardLib->RecordAssertion (
StandardLib,
AssertionType,
gEraseBlockBBTestFunctionAssertionGuid004,
@@ -525,12 +527,12 @@ BlockIo2:
L"%a:%d:EraseBlocks Status - %r, IsZero1 - %d, IsZero2 - %d, IsZero3 - %d",
__FILE__,
(UINTN)__LINE__,
- Status,
+ EraseStatus,
IsZero1, IsZero2, IsZero3
);
+ }
}
-
//
// Erase Blocks with the EraseLengthGranularity blocks
//
@@ -580,7 +582,7 @@ BlockIo2:
}
if ((EraseStatus == EFI_SUCCESS) && (IsZero == TRUE) && (EnterEvent == 1))
- AssertionType = EFI_TEST_ASSERTION_PASSED;
+ AssertionType = EFI_TEST_ASSERTION_PASSED;
else
AssertionType = EFI_TEST_ASSERTION_FAILED;
@@ -605,7 +607,7 @@ BlockIo2:
WriteStatus = BlockIo2->WriteBlocksEx (BlockIo2, MediaId, Lba, &BlockIo2Token, BufferSize, (VOID*)Buffer1);
FlushStatus = EFI_SUCCESS;
if (WriteCaching == TRUE)
- FlushStatus = BlockIo2->FlushBlocksEx (BlockIo2, &BlockIo2Token);
+ FlushStatus = BlockIo2->FlushBlocksEx (BlockIo2, &BlockIo2Token);
if ((WriteStatus != EFI_SUCCESS) || (FlushStatus != EFI_SUCCESS))
StandardLib->RecordAssertion (
--
2.20.0.windows.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [edk2-test][Patch 1/1] uefi-sct:SctPkg:Fix underflow in EraseBlocks test
2019-03-11 8:08 [edk2-test][Patch 1/1] uefi-sct:SctPkg:Fix underflow in EraseBlocks test Eric Jin
@ 2019-03-18 18:58 ` Supreeth Venkatesh
0 siblings, 0 replies; 2+ messages in thread
From: Supreeth Venkatesh @ 2019-03-18 18:58 UTC (permalink / raw)
To: Eric Jin, edk2-devel
On Mon, 2019-03-11 at 16:08 +0800, Eric Jin wrote:
> The test case does not handle properly when
> the 'EraseLengthGranularity' field of an Erase
> Block Protocol instance is 1(SD device).
> The Size parameter will underflow and become a
> very large value, cause to exceed the last LBA.
> The fix considers this case.
>
Please add a comment in the commit log to indicate there are whitepace
changes in the patch as part of the cleanup, not just the above case.
With that,
Acked-by: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Eric Jin <eric.jin@intel.com>
> ---
> uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBl
> ockBBTestFunction.c | 208
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++---------------------------------
> -------------------------------------------------------------------
> ---
> 1 file changed, 105 insertions(+), 103 deletions(-)
>
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBl
> ockBBTestFunction.c b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBl
> ockBBTestFunction.c
> index bc16a4738b4f..cbf43e1d59d7 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBl
> ockBBTestFunction.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBl
> ockBBTestFunction.c
> @@ -1,7 +1,7 @@
> /** @file
>
> Copyright 2017 Unified EFI, Inc.<BR>
> - Copyright (c) 2017 - 2018, Intel Corporation. All rights
> reserved.<BR>
> + Copyright (c) 2017 - 2019, Intel Corporation. All rights
> reserved.<BR>
>
> This program and the accompanying materials
> are licensed and made available under the terms and conditions of
> the BSD License
> @@ -128,8 +128,8 @@ BBTestEraseBlocksFunctionTest (
> // allocate aligned buffer
> //
> Buffer1 = AllocateAlignedPool(
> - EfiBootServicesData,
> - BufferSize,
> + EfiBootServicesData,
> + BufferSize,
Whitespace change?
> IoAlign
> );
> if (Buffer1 == NULL) {
> @@ -147,8 +147,8 @@ BBTestEraseBlocksFunctionTest (
> }
>
> Buffer2 = AllocateAlignedPool(
> - EfiBootServicesData,
> - BufferSize,
> + EfiBootServicesData,
> + BufferSize,
Whitespace change?
> IoAlign
> );
> if (Buffer2 == NULL) {
> @@ -166,7 +166,7 @@ BBTestEraseBlocksFunctionTest (
> return EFI_OUT_OF_RESOURCES;
> }
>
> - if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock
> != 0)) {
> + if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock
> != 0)) {
Whitesapce change?
> //
> // Read the data at first with ReadBlocks
> //
> @@ -189,10 +189,10 @@ BBTestEraseBlocksFunctionTest (
> }
>
> //
> - // Write 1
> + // Write 1
White Space change?
> //
> for (Index1 = 0; Index1 < BufferSize; Index1++) {
> - Buffer2[Index1] = 1;
> + Buffer2[Index1] = 1;
> }
>
> Status = BlockIo->WriteBlocks (BlockIo, MediaId, Lba,
> BufferSize, (VOID*)Buffer2);
> @@ -211,57 +211,59 @@ BBTestEraseBlocksFunctionTest (
> FreeAlignedPool(Buffer1);
> FreeAlignedPool(Buffer2);
> goto BlockIo2;
> - }
> + }
>
> // Erase Blocks with non-EraseLengthGranularity blocks
> - Token.Event = NULL;
> - Token.TransactionStatus = EFI_NOT_READY;
> - EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId,
> Lba+1, &Token, BufferSize - 2 * BlockSize);
> -
> - // Read the data with 0, the first/last block should not be
> erased
> - ReadStatus = BlockIo->ReadBlocks (BlockIo, MediaId, Lba,
> BufferSize, (VOID*)Buffer2);
> - if (ReadStatus == EFI_SUCCESS) {
> - for (Index1 = 0; Index1 < BlockSize; Index1++) {
> - if (Buffer2[Index1] != 0) {
> - IsZero1 = FALSE;
> - break;
> + if (BufferSize > 2 * BlockSize) {
> + Token.Event = NULL;
> + Token.TransactionStatus = EFI_NOT_READY;
> +
> + EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId,
> Lba+1, &Token, BufferSize - 2 * BlockSize);
> +
> + // Read the data with 0, the first/last block should not be
> erased
> + ReadStatus = BlockIo->ReadBlocks (BlockIo, MediaId, Lba,
> BufferSize, (VOID*)Buffer2);
> + if (ReadStatus == EFI_SUCCESS) {
> + for (Index1 = 0; Index1 < BlockSize; Index1++) {
> + if (Buffer2[Index1] != 0) {
> + IsZero1 = FALSE;
> + break;
> + }
> }
> - }
>
> - for (Index1 = BlockSize; Index1 < BufferSize - BlockSize;
> Index1++) {
> - if (Buffer2[Index1] != 0) {
> - IsZero2 = FALSE;
> - break;
> + for (Index1 = BlockSize; Index1 < BufferSize - BlockSize;
> Index1++) {
> + if (Buffer2[Index1] != 0) {
> + IsZero2 = FALSE;
> + break;
> + }
> }
> - }
>
> - for (Index1 = BufferSize - BlockSize; Index1 < BufferSize;
> Index1++) {
> - if (Buffer2[Index1] != 0) {
> - IsZero3 = FALSE;
> - break;
> + for (Index1 = BufferSize - BlockSize; Index1 < BufferSize;
> Index1++) {
> + if (Buffer2[Index1] != 0) {
> + IsZero3 = FALSE;
> + break;
> + }
> }
> - }
>
> - if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) &&
> (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
> - AssertionType = EFI_TEST_ASSERTION_PASSED;
> - else
> - AssertionType = EFI_TEST_ASSERTION_FAILED;
> -
> -
> - StandardLib->RecordAssertion (
> - StandardLib,
> - AssertionType,
> - gEraseBlockBBTestFunctionAssertionGuid003,
> - L"EraseBlocks - EraseBlocks for testing, the
> first/last block should not be erased",
> - L"%a:%d:EraseBlocks Status - %r, IsZero1 -
> %d, IsZero2 - %d, IsZero3 - %d",
> - __FILE__,
> - (UINTN)__LINE__,
> - Status,
> - IsZero1, IsZero2, IsZero3
> - );
> + if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) &&
> (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
> + AssertionType = EFI_TEST_ASSERTION_PASSED;
> + else
> + AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
>
> + StandardLib->RecordAssertion (
> + StandardLib,
> + AssertionType,
> + gEraseBlockBBTestFunctionAssertionGuid003,
> + L"EraseBlocks - EraseBlocks for testing,
> the first/last block should not be erased",
> + L"%a:%d:EraseBlocks Status - %r, IsZero1 -
> %d, IsZero2 - %d, IsZero3 - %d",
> + __FILE__,
> + (UINTN)__LINE__,
> + EraseStatus,
> + IsZero1, IsZero2, IsZero3
> + );
> +
> + }
> }
> -
> //
> // Erase Blocks with the EraseLengthGranularity blocks
> //
> @@ -283,7 +285,7 @@ BBTestEraseBlocksFunctionTest (
> }
>
> if ((EraseStatus == EFI_SUCCESS) && (IsZero == TRUE))
> - AssertionType = EFI_TEST_ASSERTION_PASSED;
> + AssertionType = EFI_TEST_ASSERTION_PASSED;
> else
> AssertionType = EFI_TEST_ASSERTION_FAILED;
>
> @@ -297,7 +299,7 @@ BBTestEraseBlocksFunctionTest (
> (UINTN)__LINE__,
> Status,
> IsZero
> - );
> + );
>
>
> }
> @@ -305,7 +307,7 @@ BBTestEraseBlocksFunctionTest (
> //
> // Restore the data with WriteBlocks and FlushBlocks
> //
> - WriteStatus = BlockIo->WriteBlocks (BlockIo, MediaId, Lba,
> BufferSize, (VOID*)Buffer1);
> + WriteStatus = BlockIo->WriteBlocks (BlockIo, MediaId, Lba,
> BufferSize, (VOID*)Buffer1);
> FlushStatus = EFI_SUCCESS;
> if (WriteCaching == TRUE)
> FlushStatus = BlockIo->FlushBlocks(BlockIo);
> @@ -325,8 +327,8 @@ BBTestEraseBlocksFunctionTest (
>
> FreeAlignedPool(Buffer1);
> FreeAlignedPool(Buffer2);
> - }
> - }
> + }
> + }
>
> BlockIo2:
>
> @@ -361,8 +363,8 @@ BlockIo2:
> // allocate aligned buffer
> //
> Buffer1 = AllocateAlignedPool(
> - EfiBootServicesData,
> - BufferSize,
> + EfiBootServicesData,
> + BufferSize,
> IoAlign
> );
> if (Buffer1 == NULL) {
> @@ -380,8 +382,8 @@ BlockIo2:
> }
>
> Buffer2 = AllocateAlignedPool(
> - EfiBootServicesData,
> - BufferSize,
> + EfiBootServicesData,
> + BufferSize,
> IoAlign
> );
> if (Buffer2 == NULL) {
> @@ -399,7 +401,7 @@ BlockIo2:
> return EFI_OUT_OF_RESOURCES;
> }
>
> - if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock
> != 0)) {
> + if ((MediaPresent == TRUE) && (ReadOnly == FALSE) && (LastBlock
> != 0)) {
> BlockIo2Token.Event = NULL;
> BlockIo2Token.TransactionStatus = EFI_NOT_READY;
>
> @@ -453,13 +455,13 @@ BlockIo2:
> //
> // Erase Blocks with non EraseLengthGranularity blocks
> //
> + if (BufferSize > 2 * BlockSize) {
> + Token.Event = NULL;
> + Token.TransactionStatus = EFI_NOT_READY;
>
> - Token.Event = NULL;
> - Token.TransactionStatus = EFI_NOT_READY;
> + EnterEvent = 0;
>
> - EnterEvent = 0;
> -
> - Status = gtBS->CreateEvent (
> + Status = gtBS->CreateEvent (
> EVT_NOTIFY_SIGNAL,
> TPL_CALLBACK,
> (EFI_EVENT_NOTIFY) NotifyFunction,
> @@ -467,8 +469,8 @@ BlockIo2:
> &Token.Event
> );
>
> - if (EFI_ERROR (Status)) {
> - StandardLib->RecordAssertion (
> + if (EFI_ERROR (Status)) {
> + StandardLib->RecordAssertion (
> StandardLib,
> EFI_TEST_ASSERTION_FAILED,
> gTestGenericFailureGuid,
> @@ -478,46 +480,46 @@ BlockIo2:
> (UINTN)__LINE__,
> Status
> );
> - FreeAlignedPool(Buffer1);
> - FreeAlignedPool(Buffer2);
> - goto End;
> - }
> -
> - EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId,
> Lba+1, &Token, BufferSize - 2 * BlockSize);
> -
> - while(Token.TransactionStatus == EFI_NOT_READY);
> -
> - // Read the data with 0, the first/last block should not be
> erased
> - ReadStatus = BlockIo2->ReadBlocksEx (BlockIo2, MediaId, Lba,
> &BlockIo2Token, BufferSize, (VOID*)Buffer2);
> - if (ReadStatus == EFI_SUCCESS) {
> - for (Index1 = 0; Index1 < BlockSize; Index1++) {
> - if (Buffer2[Index1] != 0) {
> - IsZero1 = FALSE;
> - break;
> - }
> + FreeAlignedPool(Buffer1);
> + FreeAlignedPool(Buffer2);
> + goto End;
> }
>
> - for (Index1 = BlockSize; Index1 < BufferSize - BlockSize;
> Index1++) {
> - if (Buffer2[Index1] != 0) {
> - IsZero2 = FALSE;
> - break;
> + EraseStatus = EraseBlock->EraseBlocks (EraseBlock, MediaId,
> Lba+1, &Token, BufferSize - 2 * BlockSize);
> +
> + while(Token.TransactionStatus == EFI_NOT_READY);
> +
> + // Read the data with 0, the first/last block should not be
> erased
> + ReadStatus = BlockIo2->ReadBlocksEx (BlockIo2, MediaId, Lba,
> &BlockIo2Token, BufferSize, (VOID*)Buffer2);
> + if (ReadStatus == EFI_SUCCESS) {
> + for (Index1 = 0; Index1 < BlockSize; Index1++) {
> + if (Buffer2[Index1] != 0) {
> + IsZero1 = FALSE;
> + break;
> + }
> }
> - }
>
> - for (Index1 = BufferSize - BlockSize; Index1 < BufferSize;
> Index1++) {
> - if (Buffer2[Index1] != 0) {
> - IsZero3 = FALSE;
> - break;
> + for (Index1 = BlockSize; Index1 < BufferSize - BlockSize;
> Index1++) {
> + if (Buffer2[Index1] != 0) {
> + IsZero2 = FALSE;
> + break;
> + }
> }
> - }
>
> - if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) &&
> (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
> - AssertionType = EFI_TEST_ASSERTION_PASSED;
> - else
> - AssertionType = EFI_TEST_ASSERTION_FAILED;
> + for (Index1 = BufferSize - BlockSize; Index1 < BufferSize;
> Index1++) {
> + if (Buffer2[Index1] != 0) {
> + IsZero3 = FALSE;
> + break;
> + }
> + }
> +
> + if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) &&
> (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
> + AssertionType = EFI_TEST_ASSERTION_PASSED;
> + else
> + AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
>
> -
> - StandardLib->RecordAssertion (
> + StandardLib->RecordAssertion (
> StandardLib,
> AssertionType,
> gEraseBlockBBTestFunctionAssertionGuid004,
> @@ -525,12 +527,12 @@ BlockIo2:
> L"%a:%d:EraseBlocks Status - %r, IsZero1 -
> %d, IsZero2 - %d, IsZero3 - %d",
> __FILE__,
> (UINTN)__LINE__,
> - Status,
> + EraseStatus,
> IsZero1, IsZero2, IsZero3
> );
>
> + }
> }
> -
> //
> // Erase Blocks with the EraseLengthGranularity blocks
> //
> @@ -580,7 +582,7 @@ BlockIo2:
> }
>
> if ((EraseStatus == EFI_SUCCESS) && (IsZero == TRUE) &&
> (EnterEvent == 1))
> - AssertionType = EFI_TEST_ASSERTION_PASSED;
> + AssertionType = EFI_TEST_ASSERTION_PASSED;
> else
> AssertionType = EFI_TEST_ASSERTION_FAILED;
>
> @@ -605,7 +607,7 @@ BlockIo2:
> WriteStatus = BlockIo2->WriteBlocksEx (BlockIo2, MediaId, Lba,
> &BlockIo2Token, BufferSize, (VOID*)Buffer1);
> FlushStatus = EFI_SUCCESS;
> if (WriteCaching == TRUE)
> - FlushStatus = BlockIo2->FlushBlocksEx (BlockIo2,
> &BlockIo2Token);
> + FlushStatus = BlockIo2->FlushBlocksEx (BlockIo2,
> &BlockIo2Token);
>
> if ((WriteStatus != EFI_SUCCESS) || (FlushStatus !=
> EFI_SUCCESS))
> StandardLib->RecordAssertion (
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-03-18 18:58 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-11 8:08 [edk2-test][Patch 1/1] uefi-sct:SctPkg:Fix underflow in EraseBlocks test Eric Jin
2019-03-18 18:58 ` Supreeth Venkatesh
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox