public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Fix bugs in core ResetSystem software stack
@ 2018-06-04  6:10 Ruiyu Ni
  2018-06-04  6:10 ` [PATCH v2 1/3] MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver Ruiyu Ni
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Ruiyu Ni @ 2018-06-04  6:10 UTC (permalink / raw)
  To: edk2-devel

v2:
  Fix the comments in 2/3 to solve Laszlo's concern.
  Change DxeResetSystemLib to disallow to be linked by runtime/smm drivers.
  

Ruiyu Ni (3):
  MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver
  MdeModulePkg/DxeResetSystemLib: Avoid depending on UefiRuntimeLib
  MdeModulePkg: Make sure ResetSystemRuntimeDxe uses ResetSystemLibNull

 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c   | 10 +++++-----
 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf |  5 ++---
 MdeModulePkg/MdeModulePkg.dsc                                |  5 ++++-
 MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf             |  4 ++--
 4 files changed, 13 insertions(+), 11 deletions(-)

-- 
2.16.1.windows.1



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/3] MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver
  2018-06-04  6:10 [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Ruiyu Ni
@ 2018-06-04  6:10 ` Ruiyu Ni
  2018-06-04  6:10 ` [PATCH v2 2/3] MdeModulePkg/DxeResetSystemLib: Avoid depending on UefiRuntimeLib Ruiyu Ni
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Ruiyu Ni @ 2018-06-04  6:10 UTC (permalink / raw)
  To: edk2-devel; +Cc: Liming Gao, Star Zeng

When UefiRuntimeLib links to a DXE driver, its constructor
still registers a Virtual Address Change event. The event callback
will get called when RT.SetVirtualAddressMap() is called from OS.
But when the driver is a DXE driver, the memory occupied by the
callback function might be zeroed or used by OS since the BS type
memory is free memory when entering to RT phase.

The patch reverts commit 97511979b4fdd84cf7cd51e43c22dc03e79bd4f3
"MdePkg/UefiRuntimeLib: Support more module types."
It makes sure that DXE driver cannot link to this library.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
---
 MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf b/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
index d053da545a..8f46495fc5 100644
--- a/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
+++ b/MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
@@ -5,7 +5,7 @@
 #  EVT_SIGNAL_EXIT_BOOT_SERVICES event, to provide runtime services.
 # This instance also supports SAL drivers for better performance.
 #
-# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2014, 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
@@ -24,7 +24,7 @@ [Defines]
   FILE_GUID                      = b1ee6c28-54aa-4d17-b705-3e28ccb27b2e
   MODULE_TYPE                    = DXE_RUNTIME_DRIVER
   VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = UefiRuntimeLib|DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_CORE DXE_DRIVER DXE_SMM_DRIVER 
+  LIBRARY_CLASS                  = UefiRuntimeLib|DXE_RUNTIME_DRIVER DXE_SAL_DRIVER
 
   CONSTRUCTOR                    = RuntimeDriverLibConstruct
   DESTRUCTOR                     = RuntimeDriverLibDeconstruct
-- 
2.16.1.windows.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/3] MdeModulePkg/DxeResetSystemLib: Avoid depending on UefiRuntimeLib
  2018-06-04  6:10 [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Ruiyu Ni
  2018-06-04  6:10 ` [PATCH v2 1/3] MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver Ruiyu Ni
@ 2018-06-04  6:10 ` Ruiyu Ni
  2018-06-04  6:10 ` [PATCH v2 3/3] MdeModulePkg: Make sure ResetSystemRuntimeDxe uses ResetSystemLibNull Ruiyu Ni
  2018-06-05  3:33 ` [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Zeng, Star
  3 siblings, 0 replies; 5+ messages in thread
From: Ruiyu Ni @ 2018-06-04  6:10 UTC (permalink / raw)
  To: edk2-devel; +Cc: Star Zeng, Liming Gao

Current DxeResetSystemLib depends on UefiRuntimeLib because it calls
EfiResetSystem() API exposed by UefiRuntimeLib.

Due to the commit:
"MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver"
which reverts UefiRuntimeLib to only support DXE_RUNTIME_DRIVER,
removing UefiRuntimeLib dependency makes the DxeResetSystemLib
can be used by DXE drivers.

The patch also disallows the DxeResetSystemLib to be linked by
runtime driver, SMM drivers.
Runtime driver cannot link to this library because the gRT is not
converted when entering to RT.
SMM driver cannot link to this library because calling RT services
from SMM after EndOfDxe violates security guideline.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
---
 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c   | 10 +++++-----
 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf |  5 ++---
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c
index ea452e3231..76bca223ae 100644
--- a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c
+++ b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c
@@ -14,7 +14,7 @@
 
 #include <PiDxe.h>
 #include <Library/ResetSystemLib.h>
-#include <Library/UefiRuntimeLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
 
 /**
   This function causes a system-wide reset (cold reset), in which
@@ -30,7 +30,7 @@ ResetCold (
   VOID
   )
 {
-  EfiResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
+  gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
 }
 
 /**
@@ -45,7 +45,7 @@ ResetWarm (
   VOID
   )
 {
-  EfiResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
+  gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
 }
 
 /**
@@ -60,7 +60,7 @@ ResetShutdown (
   VOID
   )
 {
-  EfiResetSystem (EfiResetShutdown, EFI_SUCCESS, 0, NULL);
+  gRT->ResetSystem (EfiResetShutdown, EFI_SUCCESS, 0, NULL);
 }
 
 /**
@@ -94,5 +94,5 @@ ResetPlatformSpecific (
   IN VOID    *ResetData
   )
 {
-  EfiResetSystem (EfiResetPlatformSpecific, EFI_SUCCESS, DataSize, ResetData);
+  gRT->ResetSystem (EfiResetPlatformSpecific, EFI_SUCCESS, DataSize, ResetData);
 }
diff --git a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
index 6eb2766b93..5cd52d8859 100644
--- a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
+++ b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
@@ -19,7 +19,7 @@ [Defines]
   FILE_GUID                      = C2BDE4F6-65EE-440B-87B5-83ABF10EF45B
   MODULE_TYPE                    = DXE_DRIVER
   VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = ResetSystemLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
+  LIBRARY_CLASS                  = ResetSystemLib|DXE_CORE DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
 
 #
 # The following information is for reference only and not required by the build tools.
@@ -35,5 +35,4 @@ [Packages]
   MdeModulePkg/MdeModulePkg.dec
 
 [LibraryClasses]
-  UefiRuntimeLib
-
+  UefiRuntimeServicesTableLib
-- 
2.16.1.windows.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 3/3] MdeModulePkg: Make sure ResetSystemRuntimeDxe uses ResetSystemLibNull
  2018-06-04  6:10 [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Ruiyu Ni
  2018-06-04  6:10 ` [PATCH v2 1/3] MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver Ruiyu Ni
  2018-06-04  6:10 ` [PATCH v2 2/3] MdeModulePkg/DxeResetSystemLib: Avoid depending on UefiRuntimeLib Ruiyu Ni
@ 2018-06-04  6:10 ` Ruiyu Ni
  2018-06-05  3:33 ` [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Zeng, Star
  3 siblings, 0 replies; 5+ messages in thread
From: Ruiyu Ni @ 2018-06-04  6:10 UTC (permalink / raw)
  To: edk2-devel; +Cc: Star Zeng, Liming Gao

Because the DxeResetSystemLib calls gRT->ResetSystem(), make sure
the gRT->ResetSystem() implementation doesn't call into
DxeResetSystemLib to avoid chicken-egg issue.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
---
 MdeModulePkg/MdeModulePkg.dsc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc
index ec24a50c7d..734c5e5ab7 100644
--- a/MdeModulePkg/MdeModulePkg.dsc
+++ b/MdeModulePkg/MdeModulePkg.dsc
@@ -363,7 +363,10 @@ [Components]
     <LibraryClasses>
       ResetSystemLib|MdeModulePkg/Library/BaseResetSystemLibNull/BaseResetSystemLibNull.inf
   }
-  MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf
+  MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf {
+    <LibraryClasses>
+      ResetSystemLib|MdeModulePkg/Library/BaseResetSystemLibNull/BaseResetSystemLibNull.inf
+  }
   MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
   MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurementDxe.inf
 
-- 
2.16.1.windows.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 0/3] Fix bugs in core ResetSystem software stack
  2018-06-04  6:10 [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Ruiyu Ni
                   ` (2 preceding siblings ...)
  2018-06-04  6:10 ` [PATCH v2 3/3] MdeModulePkg: Make sure ResetSystemRuntimeDxe uses ResetSystemLibNull Ruiyu Ni
@ 2018-06-05  3:33 ` Zeng, Star
  3 siblings, 0 replies; 5+ messages in thread
From: Zeng, Star @ 2018-06-05  3:33 UTC (permalink / raw)
  To: Ni, Ruiyu, edk2-devel@lists.01.org; +Cc: Zeng, Star

Reviewed-by: Star Zeng <star.zeng@intel.com>

-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ruiyu Ni
Sent: Monday, June 4, 2018 2:10 PM
To: edk2-devel@lists.01.org
Subject: [edk2] [PATCH v2 0/3] Fix bugs in core ResetSystem software stack

v2:
  Fix the comments in 2/3 to solve Laszlo's concern.
  Change DxeResetSystemLib to disallow to be linked by runtime/smm drivers.
  

Ruiyu Ni (3):
  MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver
  MdeModulePkg/DxeResetSystemLib: Avoid depending on UefiRuntimeLib
  MdeModulePkg: Make sure ResetSystemRuntimeDxe uses ResetSystemLibNull

 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.c   | 10 +++++-----
 MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf |  5 ++---
 MdeModulePkg/MdeModulePkg.dsc                                |  5 ++++-
 MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf             |  4 ++--
 4 files changed, 13 insertions(+), 11 deletions(-)

-- 
2.16.1.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-06-05  3:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-04  6:10 [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Ruiyu Ni
2018-06-04  6:10 ` [PATCH v2 1/3] MdePkg/UefiRuntimeLib: Do not allow to be linked by DXE driver Ruiyu Ni
2018-06-04  6:10 ` [PATCH v2 2/3] MdeModulePkg/DxeResetSystemLib: Avoid depending on UefiRuntimeLib Ruiyu Ni
2018-06-04  6:10 ` [PATCH v2 3/3] MdeModulePkg: Make sure ResetSystemRuntimeDxe uses ResetSystemLibNull Ruiyu Ni
2018-06-05  3:33 ` [PATCH v2 0/3] Fix bugs in core ResetSystem software stack Zeng, Star

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox