/** @file\r
*\r
-* Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.\r
+* Copyright (c) 2011 - 2015, ARM Limited. All rights reserved.\r
*\r
* This program and the accompanying materials\r
* are licensed and made available under the terms and conditions of the BSD License\r
if (InitrdPathNodes != NULL) {\r
// Append the Device Path to the selected device path\r
InitrdPath = AppendDevicePath (SupportedBootDevice->DevicePathProtocol, (CONST EFI_DEVICE_PATH_PROTOCOL *)InitrdPathNodes);\r
+ // Free the InitrdPathNodes created by Support->CreateDevicePathNode()\r
+ FreePool (InitrdPathNodes);\r
+\r
if (InitrdPath == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto EXIT;\r
// Append the Device Path to the selected device path\r
InitrdPath = AppendDevicePath (TempInitrdPath, (CONST EFI_DEVICE_PATH_PROTOCOL *)InitrdPathNodes);\r
FreePool (TempInitrdPath);\r
+ // Free the InitrdPathNodes created by Support->CreateDevicePathNode()\r
+ FreePool (InitrdPathNodes);\r
if (InitrdPath == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto EXIT;\r
\r
Print(L"Arguments to pass to the binary: ");\r
if (CmdLineSize > 0) {\r
- AsciiStrnCpy(CmdLine, (CONST CHAR8*)(LinuxArguments + 1), CmdLineSize);\r
+ AsciiStrnCpy (CmdLine, (CONST CHAR8*)(LinuxArguments + 1), sizeof (CmdLine));\r
+ CmdLine[sizeof (CmdLine) - 1] = '\0';\r
} else {\r
CmdLine[0] = '\0';\r
}\r
if (BootOption->OptionalDataSize > 0) {\r
IsPrintable = IsPrintableString (BootOption->OptionalData, &IsUnicode);\r
if (IsPrintable) {\r
+ //\r
+ // The size in bytes of the string, final zero included, should\r
+ // be equal to or at least lower than "BootOption->OptionalDataSize"\r
+ // and the "IsPrintableString()" has already tested that the length\r
+ // in number of characters is smaller than BOOT_DEVICE_OPTION_MAX,\r
+ // final '\0' included. We can thus copy the string for editing\r
+ // using "CopyMem()". Furthermore, note that in the case of an Unicode\r
+ // string "StrnCpy()" and "StrCpy()" can not be used to copy the\r
+ // string because the data pointed to by "BootOption->OptionalData"\r
+ // is not necessarily 2-byte aligned.\r
+ //\r
if (IsUnicode) {\r
- StrnCpy (UnicodeCmdLine, BootOption->OptionalData, BootOption->OptionalDataSize / 2);\r
+ CopyMem (\r
+ UnicodeCmdLine, BootOption->OptionalData,\r
+ MIN (sizeof (UnicodeCmdLine),\r
+ BootOption->OptionalDataSize)\r
+ );\r
} else {\r
- AsciiStrnCpy (CmdLine, BootOption->OptionalData, BootOption->OptionalDataSize);\r
+ CopyMem (\r
+ CmdLine, BootOption->OptionalData,\r
+ MIN (sizeof (CmdLine),\r
+ BootOption->OptionalDataSize)\r
+ );\r
}\r
}\r
} else {\r
if (FdtDevicePathNodes != NULL) {\r
// Append the Device Path node to the select device path\r
FdtDevicePath = AppendDevicePath (SupportedBootDevice->DevicePathProtocol, FdtDevicePathNodes);\r
+ // Free the FdtDevicePathNodes created by Support->CreateDevicePathNode()\r
+ FreePool (FdtDevicePathNodes);\r
FdtDevicePathSize = GetDevicePathSize (FdtDevicePath);\r
Status = gRT->SetVariable (\r
(CHAR16*)L"Fdt",\r
);\r
ASSERT_EFI_ERROR(Status);\r
} else {\r
- gRT->SetVariable (\r
+ Status = gRT->SetVariable (\r
(CHAR16*)L"Fdt",\r
&gArmGlobalVariableGuid,\r
EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r