summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg/Library
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@arm.com>2020-04-08 19:23:27 +0200
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2020-04-30 07:51:10 +0000
commit13406bdeb5c5bea7f5cee6b3c0dfaff253579710 (patch)
tree4c79519bcd9fc48ba18cf40523f69549960a72ac /MdeModulePkg/Library
parentf07fb43b2d3f92a15d6992205b72ba5df0e74fe2 (diff)
downloadedk2-13406bdeb5c5bea7f5cee6b3c0dfaff253579710.tar.gz
edk2-13406bdeb5c5bea7f5cee6b3c0dfaff253579710.tar.bz2
edk2-13406bdeb5c5bea7f5cee6b3c0dfaff253579710.zip
MdeModulePkg/DeviceManagerUiLib: connect all before creating menu page
The device manager UI library creates a UiApp submenu that contains a list of network devices in the system. The logic that creates this menu assumes that all handles have been connected to their drivers, but this is not guaranteed in the general case: due to the way UiApp is constructed, this logic runs before the UiApp entrypoint is invoked, which is where ConnectAll() is normally called to ensure that all existing controllers are connected to their drivers. Moving this call into DeviceManagerUiLib is not an option, since it is incorporated into UiApp via NULL library class resolution, and so it may not be included to begin with. So work around this by doing an explicit additional ConnectAll() before populating the pages. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Link: https://edk2.groups.io/g/devel/topic/72879609#57075 Reviewed-by: Dandan Bi <dandan.bi@intel.com>
Diffstat (limited to 'MdeModulePkg/Library')
-rw-r--r--MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c7
-rw-r--r--MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h1
-rw-r--r--MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf1
3 files changed, 9 insertions, 0 deletions
diff --git a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c
index 0540e6fa8a..3bc13d3407 100644
--- a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c
+++ b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c
@@ -893,6 +893,13 @@ DeviceManagerUiLibConstructor (
ASSERT (gDeviceManagerPrivate.HiiHandle != NULL);
//
+ // The device manager form contains a page listing all the network
+ // controllers in the system. This list can only be populated if all
+ // handles have been connected, so do it here.
+ //
+ EfiBootManagerConnectAll ();
+
+ //
// Update boot manager page
//
CreateDeviceManagerForm (DEVICE_MANAGER_FORM_ID);
diff --git a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h
index 22fe12d2a5..c53c2a1a0e 100644
--- a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h
+++ b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h
@@ -23,6 +23,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/BaseLib.h>
#include <Library/HiiLib.h>
#include <Library/DevicePathLib.h>
+#include <Library/UefiBootManagerLib.h>
#include <Library/UefiHiiServicesLib.h>
//
diff --git a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
index cb01b3b851..d7f833d8b2 100644
--- a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+++ b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
@@ -40,6 +40,7 @@
DebugLib
PrintLib
HiiLib
+ UefiBootManagerLib
UefiHiiServicesLib
[Guids]