From b34e44612246d9bb86251e8b940dd43a3ad64260 Mon Sep 17 00:00:00 2001 From: Gary Li Date: Fri, 3 Jun 2016 15:21:26 +0800 Subject: MdeModulePkg:Prevent the BmRepairAllControllers routine in an infinite loop Prevent the BmRepairAllControllers routine in an infinite loop Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gary Li Reviewed-by: Ruiyu Ni Reviewed-by: Liming Gao --- MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c') diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c b/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c index bffbedaf84..1e68cbc01f 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c @@ -1,8 +1,9 @@ /** @file Library functions which relates with driver health. -(C) Copyright 2015 Hewlett-Packard Development Company, L.P.
Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.
+(C) Copyright 2015 Hewlett-Packard Development Company, L.P.
+(C) Copyright 2016 Hewlett Packard Enterprise Development LP
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -439,6 +440,8 @@ BmRepairAllControllers ( BOOLEAN RebootRequired; EFI_HII_HANDLE *HiiHandles; EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2; + UINT32 MaxRepairCount; + UINT32 RepairCount; // // Configure PcdDriverHealthConfigureForm to ZeroGuid to disable driver health check. @@ -450,6 +453,9 @@ BmRepairAllControllers ( Status = gBS->LocateProtocol (&gEfiFormBrowser2ProtocolGuid, NULL, (VOID **) &FormBrowser2); ASSERT_EFI_ERROR (Status); + MaxRepairCount = PcdGet32 (PcdMaxRepairCount); + RepairCount = 0; + do { RepairRequired = FALSE; ConfigurationRequired = FALSE; @@ -512,7 +518,8 @@ BmRepairAllControllers ( } EfiBootManagerFreeDriverHealthInfo (DriverHealthInfo, Count); - } while (RepairRequired || ConfigurationRequired); + RepairCount++; + } while ((RepairRequired || ConfigurationRequired) && ((MaxRepairCount == 0) || (RepairCount < MaxRepairCount))); RebootRequired = FALSE; ReconnectRequired = FALSE; -- cgit v1.2.3