diff --git a/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c b/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c index 75211e879a..0c1f6a61a7 100644 --- a/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c +++ b/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c @@ -2586,22 +2586,26 @@ DevPathFromTextRelativeOffsetRange ( IN CHAR16 *TextDeviceNode ) { - CHAR16 *StartingOffsetStr; - CHAR16 *EndingOffsetStr; - MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH - *Offset; + CHAR16 *StartingOffsetStr; + CHAR16 *EndingOffsetStr; + MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *Offset; + UINT64 StartingOffset; + UINT64 EndingOffset; StartingOffsetStr = GetNextParamStr (&TextDeviceNode); EndingOffsetStr = GetNextParamStr (&TextDeviceNode); - Offset = (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *) - CreateDeviceNode ( - MEDIA_DEVICE_PATH, - MEDIA_RELATIVE_OFFSET_RANGE_DP, - sizeof (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH) - ); + Offset = (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *) CreateDeviceNode ( + MEDIA_DEVICE_PATH, + MEDIA_RELATIVE_OFFSET_RANGE_DP, + sizeof (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH) + ); + + Strtoi64 (StartingOffsetStr, &StartingOffset); + Strtoi64 (EndingOffsetStr, &EndingOffset); + + WriteUnaligned64 ((VOID *) &Offset->StartingOffset, StartingOffset); + WriteUnaligned64 ((VOID *) &Offset->EndingOffset, EndingOffset); - Strtoi64 (StartingOffsetStr, &Offset->StartingOffset); - Strtoi64 (EndingOffsetStr, &Offset->EndingOffset); return (EFI_DEVICE_PATH_PROTOCOL *) Offset; }