When secure boot is enabled, if one loads keys from a FAT formatted
eMMC/SD/USB when trying to provision PK/KEK/DB keys via the menu,
an assert in StrLen() occurs.
This is because the filename starts on odd address, which is not a uint16
aligned boundary: https://bugzilla.tianocore.org/show_bug.cgi?id=1003
There are further known issues with the OpenFileByDevicePath() function;
those are tracked by
<https://bugzilla.tianocore.org/show_bug.cgi?id=1008>.
Cc: Chao Zhang <chao.b.zhang@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Roman Bacik <roman.bacik@broadcom.com>
Reviewed-by: "Yao, Jiewen" <jiewen.yao@intel.com>
[lersek@redhat.com: whitespace fixes]
[lersek@redhat.com: reference TianoCore BZ#1008]
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
EFI_FILE_PROTOCOL *Handle1;\r
EFI_FILE_PROTOCOL *Handle2;\r
EFI_HANDLE DeviceHandle;\r
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
\r
if ((FilePath == NULL || FileHandle == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
//\r
Handle2 = Handle1;\r
Handle1 = NULL;\r
//\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
\r
//\r
// Try to test opening an existing file\r
Status = Handle2->Open (\r
Handle2,\r
&Handle1,\r
Status = Handle2->Open (\r
Handle2,\r
&Handle1,\r
- ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,\r
OpenMode &~EFI_FILE_MODE_CREATE,\r
0\r
);\r
OpenMode &~EFI_FILE_MODE_CREATE,\r
0\r
);\r
Status = Handle2->Open (\r
Handle2,\r
&Handle1,\r
Status = Handle2->Open (\r
Handle2,\r
&Handle1,\r
- ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,\r
OpenMode,\r
Attributes\r
);\r
OpenMode,\r
Attributes\r
);\r
//\r
Handle2->Close (Handle2);\r
\r
//\r
Handle2->Close (Handle2);\r
\r
+ FreePool (PathName);\r
+\r
if (EFI_ERROR(Status)) {\r
return (Status);\r
}\r
if (EFI_ERROR(Status)) {\r
return (Status);\r
}\r