]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/Bds: Use unaligned read to access OptionalData in EFI_LOAD_OPTION
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 28 Jun 2011 11:55:11 +0000 (11:55 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 28 Jun 2011 11:55:11 +0000 (11:55 +0000)
EFI_LOAD_OPTION is a packed structure. Accessing to the non aligned double word
requires to use ReadUnaligned32() function.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11916 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/Bds/BootMenu.c
ArmPlatformPkg/Bds/BootOption.c

index 35c569d0b77d620be9ecb5d5f74fe21a342994d7..1e25c1e72e5d477302736c377917e279f919a336 100644 (file)
@@ -436,7 +436,7 @@ BootMenuMain (
 \r
         Print(L"\t- %s\n",DevicePathTxt);\r
         if (BootOption->OptionalData != NULL) {\r
-          Print(L"\t- LoaderType: %d\n",BootOption->OptionalData->LoaderType);\r
+          Print(L"\t- LoaderType: %d\n", ReadUnaligned32 (&BootOption->OptionalData->LoaderType));\r
           if (BootOption->OptionalData->Arguments != NULL) {\r
             Print(L"\t- Arguments: %a\n",BootOption->OptionalData->Arguments);\r
           }\r
index d3c7445fae3d7b463c965409bc5804eb4c1e5212..dba0d0f639a66815fbdf2f108ebbe12cacd5b9c7 100644 (file)
@@ -21,20 +21,22 @@ BootOptionStart (
   IN BDS_LOAD_OPTION *BootOption\r
   )\r
 {\r
-  EFI_STATUS Status;\r
-  EFI_DEVICE_PATH* FdtDevicePath;\r
-  EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL  *EfiDevicePathFromTextProtocol;\r
+  EFI_STATUS                            Status;\r
+  EFI_DEVICE_PATH*                      FdtDevicePath;\r
+  EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL*   EfiDevicePathFromTextProtocol;\r
+  UINT32                                LoaderType;\r
 \r
   Status = EFI_UNSUPPORTED;\r
+  LoaderType = ReadUnaligned32 (&BootOption->OptionalData->LoaderType);\r
 \r
-  if (BootOption->OptionalData->LoaderType == BDS_LOADER_EFI_APPLICATION) {\r
+  if (LoaderType == BDS_LOADER_EFI_APPLICATION) {\r
     // Need to connect every drivers to ensure no dependencies are missing for the application\r
     BdsConnectAllDrivers();\r
 \r
     Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList);\r
-  } else if (BootOption->OptionalData->LoaderType == BDS_LOADER_KERNEL_LINUX_ATAG) {\r
+  } else if (LoaderType == BDS_LOADER_KERNEL_LINUX_ATAG) {\r
     Status = BdsBootLinux (BootOption->FilePathList, BootOption->OptionalData->Arguments, NULL);\r
-  } else if (BootOption->OptionalData->LoaderType == BDS_LOADER_KERNEL_LINUX_FDT) {\r
+  } else if (LoaderType == BDS_LOADER_KERNEL_LINUX_FDT) {\r
     // Convert the FDT path into a Device Path\r
     Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL, (VOID **)&EfiDevicePathFromTextProtocol);\r
     ASSERT_EFI_ERROR(Status);\r
@@ -178,12 +180,12 @@ BootOptionAllocateBootIndex (
 STATIC\r
 EFI_STATUS\r
 BootOptionSetFields (\r
-  IN BDS_LOAD_OPTION *BootOption,\r
-  IN UINT32 Attributes,\r
-  IN CHAR16* BootDescription,\r
-  IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
-  IN  BDS_LOADER_TYPE   BootType,\r
-  IN  CHAR8*            BootArguments\r
+  IN BDS_LOAD_OPTION*           BootOption,\r
+  IN UINT32                     Attributes,\r
+  IN CHAR16*                    BootDescription,\r
+  IN EFI_DEVICE_PATH_PROTOCOL*  DevicePath,\r
+  IN  BDS_LOADER_TYPE           BootType,\r
+  IN  CHAR8*                    BootArguments\r
   )\r
 {\r
   EFI_LOAD_OPTION EfiLoadOption;\r
@@ -273,17 +275,17 @@ BootOptionSetFields (
 \r
 EFI_STATUS\r
 BootOptionCreate (\r
-  IN  UINT32 Attributes,\r
-  IN  CHAR16* BootDescription,\r
+  IN  UINT32                    Attributes,\r
+  IN  CHAR16*                   BootDescription,\r
   IN  EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
-  IN  BDS_LOADER_TYPE   BootType,\r
-  IN  CHAR8*            BootArguments,\r
-  OUT BDS_LOAD_OPTION **BdsLoadOption\r
+  IN  BDS_LOADER_TYPE           BootType,\r
+  IN  CHAR8*                    BootArguments,\r
+  OUT BDS_LOAD_OPTION           **BdsLoadOption\r
   )\r
 {\r
-  EFI_STATUS      Status;\r
-  BDS_LOAD_OPTION *BootOption;\r
-  CHAR16          BootVariableName[9];\r
+  EFI_STATUS        Status;\r
+  BDS_LOAD_OPTION   *BootOption;\r
+  CHAR16            BootVariableName[9];\r
   UINT16            *BootOrder;\r
   UINTN             BootOrderSize;\r
 \r