From: oliviermartin Date: Tue, 28 Jun 2011 11:55:11 +0000 (+0000) Subject: ArmPlatformPkg/Bds: Use unaligned read to access OptionalData in EFI_LOAD_OPTION X-Git-Tag: edk2-stable201903~14596 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=c60ea9a873b8fe0c4b9409b28d1608f7f80c9c22 ArmPlatformPkg/Bds: Use unaligned read to access OptionalData in EFI_LOAD_OPTION 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 --- diff --git a/ArmPlatformPkg/Bds/BootMenu.c b/ArmPlatformPkg/Bds/BootMenu.c index 35c569d0b7..1e25c1e72e 100644 --- a/ArmPlatformPkg/Bds/BootMenu.c +++ b/ArmPlatformPkg/Bds/BootMenu.c @@ -436,7 +436,7 @@ BootMenuMain ( Print(L"\t- %s\n",DevicePathTxt); if (BootOption->OptionalData != NULL) { - Print(L"\t- LoaderType: %d\n",BootOption->OptionalData->LoaderType); + Print(L"\t- LoaderType: %d\n", ReadUnaligned32 (&BootOption->OptionalData->LoaderType)); if (BootOption->OptionalData->Arguments != NULL) { Print(L"\t- Arguments: %a\n",BootOption->OptionalData->Arguments); } diff --git a/ArmPlatformPkg/Bds/BootOption.c b/ArmPlatformPkg/Bds/BootOption.c index d3c7445fae..dba0d0f639 100644 --- a/ArmPlatformPkg/Bds/BootOption.c +++ b/ArmPlatformPkg/Bds/BootOption.c @@ -21,20 +21,22 @@ BootOptionStart ( IN BDS_LOAD_OPTION *BootOption ) { - EFI_STATUS Status; - EFI_DEVICE_PATH* FdtDevicePath; - EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL *EfiDevicePathFromTextProtocol; + EFI_STATUS Status; + EFI_DEVICE_PATH* FdtDevicePath; + EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL* EfiDevicePathFromTextProtocol; + UINT32 LoaderType; Status = EFI_UNSUPPORTED; + LoaderType = ReadUnaligned32 (&BootOption->OptionalData->LoaderType); - if (BootOption->OptionalData->LoaderType == BDS_LOADER_EFI_APPLICATION) { + if (LoaderType == BDS_LOADER_EFI_APPLICATION) { // Need to connect every drivers to ensure no dependencies are missing for the application BdsConnectAllDrivers(); Status = BdsStartEfiApplication (mImageHandle, BootOption->FilePathList); - } else if (BootOption->OptionalData->LoaderType == BDS_LOADER_KERNEL_LINUX_ATAG) { + } else if (LoaderType == BDS_LOADER_KERNEL_LINUX_ATAG) { Status = BdsBootLinux (BootOption->FilePathList, BootOption->OptionalData->Arguments, NULL); - } else if (BootOption->OptionalData->LoaderType == BDS_LOADER_KERNEL_LINUX_FDT) { + } else if (LoaderType == BDS_LOADER_KERNEL_LINUX_FDT) { // Convert the FDT path into a Device Path Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL, (VOID **)&EfiDevicePathFromTextProtocol); ASSERT_EFI_ERROR(Status); @@ -178,12 +180,12 @@ BootOptionAllocateBootIndex ( STATIC EFI_STATUS BootOptionSetFields ( - IN BDS_LOAD_OPTION *BootOption, - IN UINT32 Attributes, - IN CHAR16* BootDescription, - IN EFI_DEVICE_PATH_PROTOCOL* DevicePath, - IN BDS_LOADER_TYPE BootType, - IN CHAR8* BootArguments + IN BDS_LOAD_OPTION* BootOption, + IN UINT32 Attributes, + IN CHAR16* BootDescription, + IN EFI_DEVICE_PATH_PROTOCOL* DevicePath, + IN BDS_LOADER_TYPE BootType, + IN CHAR8* BootArguments ) { EFI_LOAD_OPTION EfiLoadOption; @@ -273,17 +275,17 @@ BootOptionSetFields ( EFI_STATUS BootOptionCreate ( - IN UINT32 Attributes, - IN CHAR16* BootDescription, + IN UINT32 Attributes, + IN CHAR16* BootDescription, IN EFI_DEVICE_PATH_PROTOCOL* DevicePath, - IN BDS_LOADER_TYPE BootType, - IN CHAR8* BootArguments, - OUT BDS_LOAD_OPTION **BdsLoadOption + IN BDS_LOADER_TYPE BootType, + IN CHAR8* BootArguments, + OUT BDS_LOAD_OPTION **BdsLoadOption ) { - EFI_STATUS Status; - BDS_LOAD_OPTION *BootOption; - CHAR16 BootVariableName[9]; + EFI_STATUS Status; + BDS_LOAD_OPTION *BootOption; + CHAR16 BootVariableName[9]; UINT16 *BootOrder; UINTN BootOrderSize;