Skip to content

Commit

Permalink
Handling the continue cases for BDS retry (#367)
Browse files Browse the repository at this point in the history
## Description

The original change (#347)
will not handle the use case when the last entry in the BootOptions
being inactive, and the loop will break in one of the "continue" cases.

This change will ensure that continue statements redirect control to
logic for handling infinite retry attempt support.

Fixes #368.

- [x] Impacts functionality?
- **Functionality** - Does the change ultimately impact how firmware
functions?
- Examples: Add a new library, publish a new PPI, update an algorithm,
...
- [ ] Impacts security?
- **Security** - Does the change have a direct security impact on an
application,
    flow, or firmware?
  - Examples: Crypto algorithm change, buffer overflow fix, parameter
    validation improvement, ...
- [ ] Breaking change?
- **Breaking change** - Will anyone consuming this change experience a
break
    in build or boot behavior?
- Examples: Add a new library class, move a module to a different repo,
call
    a function in a new library class in a pre-existing module, ...
- [ ] Includes tests?
  - **Tests** - Does the change include any explicit test code?
  - Examples: Unit tests, integration tests, robot tests, ...
- [ ] Includes documentation?
- **Documentation** - Does the change contain explicit documentation
additions
    outside direct code modifications (and comments)?
- Examples: Update readme file, add feature readme file, link to
documentation
    on an a separate Web page, ...

## How This Was Tested

This is tested on FVP based virtual platform.

## Integration Instructions

N/A

---------

Signed-off-by: kuqin12 <42554914+kuqin12@users.noreply.github.com>
Co-authored-by: Michael Kubacki <michael.kubacki@microsoft.com>
  • Loading branch information
2 people authored and kenlautner committed Apr 28, 2023
1 parent f4a5907 commit b074795
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions MdeModulePkg/Universal/BdsDxe/BdsEntry.c
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,18 @@ BootBootOptions (
//
// Attempt boot each boot option
//
for (Index = 0; Index < BootOptionCount; Index++) {
// MU_CHANGE [BEGINS]- Support infinite boot retries
for (Index = 0; ; Index++) {
if (Index == BootOptionCount) {
if (PcdGetBool (PcdSupportInfiniteBootRetries)) {
Index = 0;
} else {
break;
}
}

// MU_CHANGE [ENDS]- Support infinite boot retries

//
// According to EFI Specification, if a load option is not marked
// as LOAD_OPTION_ACTIVE, the boot manager will not automatically
Expand Down Expand Up @@ -441,13 +452,6 @@ BootBootOptions (
// better location.
}

if (PcdGetBool (PcdSupportInfiniteBootRetries)) {
if (Index == (BootOptionCount - 1)) {
// Resetting index back to -1 so loop increment will result in Index 0 for next iteration
Index = (UINTN)-1;
}
}

// MU_CHANGE [END]- Support infinite boot retries
}

Expand Down

0 comments on commit b074795

Please sign in to comment.