\r
Copyright (c) 2018 Qualcomm Datacenter Technologies, Inc.\r
Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>\r
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
EFI_DEVICE_PATH_PROTOCOL *LastDevicePathNode;\r
UINT32 BlockSize;\r
UINT32 MediaId;\r
- EFI_LBA LastBlock;\r
+ EFI_LBA LastSector;\r
EFI_PARTITION_INFO_PROTOCOL PartitionInfo;\r
\r
Found = EFI_NOT_FOUND;\r
\r
- BlockSize = BlockIo->Media->BlockSize;\r
- MediaId = BlockIo->Media->MediaId;\r
- LastBlock = BlockIo->Media->LastBlock;\r
+ BlockSize = BlockIo->Media->BlockSize;\r
+ MediaId = BlockIo->Media->MediaId;\r
+ LastSector = DivU64x32 (\r
+ MultU64x32 (BlockIo->Media->LastBlock + 1, BlockSize),\r
+ MBR_SIZE\r
+ ) - 1;\r
+\r
+ //\r
+ // Ensure the block size can hold the MBR\r
+ //\r
+ if (BlockSize < sizeof (MASTER_BOOT_RECORD)) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
\r
Mbr = AllocatePool (BlockSize);\r
if (Mbr == NULL) {\r
Found = Status;\r
goto Done;\r
}\r
- if (!PartitionValidMbr (Mbr, LastBlock)) {\r
+ if (!PartitionValidMbr (Mbr, LastSector)) {\r
goto Done;\r
}\r
//\r