[edk2-devel] [PATCH v3 1/2] BoardModulePkg: Copy device path before processing

Abdul Lateef Attar via groups.io abdattar=amd.com at groups.io
Wed Jan 18 13:04:12 UTC 2023


GCC compiler puts the DevicePath PCDs to the read-only
section. During boot if try to process the device path
after PtrGetPtr it throws a page fault exception.

Hence making a local copy using DuplicateDevicePath()
to avoid the page fault exception.

Cc: Oram Isaac W <isaac.w.oram at intel.com>
Cc: Eric Dong <eric.dong at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>

Signed-off-by: Abdul Lateef Attar <abdattar at amd.com>
---
 .../Library/BoardBdsHookLib/BoardBdsHookLib.c | 24 +++++++++++++++----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
index 0bcee7c9a4ba..e866f70bc336 100644
--- a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
+++ b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
@@ -3,6 +3,7 @@
   implementation instance of the BDS hook library

 

   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>

+  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>

   SPDX-License-Identifier: BSD-2-Clause-Patent

 

 **/

@@ -131,7 +132,7 @@ IsTrustedConsole (
 

   switch (ConsoleType) {

     case ConIn:

-      TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleInputDevicePath);

+      TrustedConsoleDevicepath = DuplicateDevicePath (PcdGetPtr (PcdTrustedConsoleInputDevicePath));

       break;

     case ConOut:

       //

@@ -147,7 +148,7 @@ IsTrustedConsole (
         TempDevicePath = NextDevicePathNode (TempDevicePath);

       }

 

-      TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleOutputDevicePath);

+      TrustedConsoleDevicepath = DuplicateDevicePath (PcdGetPtr (PcdTrustedConsoleOutputDevicePath));

       break;

     default:

       ASSERT (FALSE);

@@ -164,6 +165,9 @@ IsTrustedConsole (
     if (CompareMem (ConsoleDevice, Instance, Size - END_DEVICE_PATH_LENGTH) == 0) {

       FreePool (Instance);

       FreePool (ConsoleDevice);

+      if (TempDevicePath != NULL) {

+        FreePool (TempDevicePath);

+      }

       return TRUE;

     }

 

@@ -171,7 +175,9 @@ IsTrustedConsole (
   } while (TempDevicePath != NULL);

 

   FreePool (ConsoleDevice);

-

+  if (TempDevicePath != NULL) {

+    FreePool (TempDevicePath);

+  }

   return FALSE;

 }

 

@@ -624,7 +630,7 @@ ConnectTrustedStorage (
   EFI_STATUS                Status;

   EFI_HANDLE                DeviceHandle;

 

-  TrustedStorageDevicepath = PcdGetPtr (PcdTrustedStorageDevicePath);

+  TrustedStorageDevicepath = DuplicateDevicePath (PcdGetPtr (PcdTrustedStorageDevicePath));

   DumpDevicePath (L"TrustedStorage", TrustedStorageDevicepath);

 

   TempDevicePath = TrustedStorageDevicepath;

@@ -649,6 +655,10 @@ ConnectTrustedStorage (
 

     FreePool (Instance);

   } while (TempDevicePath != NULL);

+

+  if (TempDevicePath != NULL) {

+    FreePool (TempDevicePath);

+  }

 }

 

 

@@ -1031,7 +1041,7 @@ AddConsoleVariable (
   EFI_HANDLE                GraphicsControllerHandle;

   EFI_DEVICE_PATH           *GopDevicePath;

 

-  TempDevicePath = ConsoleDevicePath;

+  TempDevicePath = DuplicateDevicePath (ConsoleDevicePath);

   do {

     Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);

     if (Instance == NULL) {

@@ -1074,6 +1084,10 @@ AddConsoleVariable (
 

     FreePool (Instance);

   } while (TempDevicePath != NULL);

+

+  if (TempDevicePath != NULL) {

+    FreePool (TempDevicePath);

+  }

 }

 

 

-- 
2.25.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#98802): https://edk2.groups.io/g/devel/message/98802
Mute This Topic: https://groups.io/mt/96353001/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list