]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigFileExplorer.c
SecurityPkg: Fix assert when setting key from eMMC/SD/USB
[mirror_edk2.git] / SecurityPkg / VariableAuthenticated / SecureBootConfigDxe / SecureBootConfigFileExplorer.c
index 05d97dc43b6e6d20d7d3912d27637c5004eb289d..2a26c20f394c0c162d52a76f650616a26d17f292 100644 (file)
@@ -123,6 +123,8 @@ OpenFileByDevicePath(
   EFI_FILE_PROTOCOL               *Handle1;\r
   EFI_FILE_PROTOCOL               *Handle2;\r
   EFI_HANDLE                      DeviceHandle;\r
+  CHAR16                          *PathName;\r
+  UINTN                           PathLength;\r
 \r
   if ((FilePath == NULL || FileHandle == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -173,6 +175,11 @@ OpenFileByDevicePath(
     //\r
     Handle2  = Handle1;\r
     Handle1 = NULL;\r
+    PathLength = DevicePathNodeLength (*FilePath) - sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
+    PathName = AllocateCopyPool (PathLength, ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName);\r
+    if (PathName == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
 \r
     //\r
     // Try to test opening an existing file\r
@@ -180,7 +187,7 @@ OpenFileByDevicePath(
     Status = Handle2->Open (\r
                           Handle2,\r
                           &Handle1,\r
-                          ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,\r
+                          PathName,\r
                           OpenMode &~EFI_FILE_MODE_CREATE,\r
                           0\r
                          );\r
@@ -192,7 +199,7 @@ OpenFileByDevicePath(
       Status = Handle2->Open (\r
                             Handle2,\r
                             &Handle1,\r
-                            ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,\r
+                            PathName,\r
                             OpenMode,\r
                             Attributes\r
                            );\r
@@ -202,6 +209,8 @@ OpenFileByDevicePath(
     //\r
     Handle2->Close (Handle2);\r
 \r
+    FreePool (PathName);\r
+\r
     if (EFI_ERROR(Status)) {\r
       return (Status);\r
     }\r
@@ -343,6 +352,7 @@ UpdatePage(
   @retval FALSE  Not exit caller function.\r
 **/\r
 BOOLEAN\r
+EFIAPI\r
 UpdatePKFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r
@@ -360,6 +370,7 @@ UpdatePKFromFile (
   @retval FALSE  Not exit caller function.\r
 **/\r
 BOOLEAN\r
+EFIAPI\r
 UpdateKEKFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r
@@ -376,6 +387,7 @@ UpdateKEKFromFile (
   @retval FALSE  Not exit caller function.\r
 **/\r
 BOOLEAN\r
+EFIAPI\r
 UpdateDBFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r
@@ -392,6 +404,7 @@ UpdateDBFromFile (
   @retval FALSE  Not exit caller function.\r
 **/\r
 BOOLEAN\r
+EFIAPI\r
 UpdateDBXFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r
@@ -408,6 +421,7 @@ UpdateDBXFromFile (
   @retval FALSE  Not exit caller function.\r
 **/\r
 BOOLEAN\r
+EFIAPI\r
 UpdateDBTFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r