|
1 | 1 | /** @file |
2 | 2 | Save the S3 data to S3 boot script. |
3 | 3 |
|
4 | | - Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> |
| 4 | + Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR> |
5 | 5 |
|
6 | 6 | SPDX-License-Identifier: BSD-2-Clause-Patent |
7 | 7 |
|
@@ -1006,6 +1006,14 @@ S3BootScriptSaveIoWrite ( |
1006 | 1006 | EFI_BOOT_SCRIPT_IO_WRITE ScriptIoWrite; |
1007 | 1007 |
|
1008 | 1008 | WidthInByte = (UINT8) (0x01 << (Width & 0x03)); |
| 1009 | + |
| 1010 | + // |
| 1011 | + // Truncation check |
| 1012 | + // |
| 1013 | + if ((Count > MAX_UINT8) || |
| 1014 | + (WidthInByte * Count > MAX_UINT8 - sizeof (EFI_BOOT_SCRIPT_IO_WRITE))) { |
| 1015 | + return RETURN_OUT_OF_RESOURCES; |
| 1016 | + } |
1009 | 1017 | Length = (UINT8)(sizeof (EFI_BOOT_SCRIPT_IO_WRITE) + (WidthInByte * Count)); |
1010 | 1018 |
|
1011 | 1019 | Script = S3BootScriptGetEntryAddAddress (Length); |
@@ -1102,6 +1110,14 @@ S3BootScriptSaveMemWrite ( |
1102 | 1110 | EFI_BOOT_SCRIPT_MEM_WRITE ScriptMemWrite; |
1103 | 1111 |
|
1104 | 1112 | WidthInByte = (UINT8) (0x01 << (Width & 0x03)); |
| 1113 | + |
| 1114 | + // |
| 1115 | + // Truncation check |
| 1116 | + // |
| 1117 | + if ((Count > MAX_UINT8) || |
| 1118 | + (WidthInByte * Count > MAX_UINT8 - sizeof (EFI_BOOT_SCRIPT_MEM_WRITE))) { |
| 1119 | + return RETURN_OUT_OF_RESOURCES; |
| 1120 | + } |
1105 | 1121 | Length = (UINT8)(sizeof (EFI_BOOT_SCRIPT_MEM_WRITE) + (WidthInByte * Count)); |
1106 | 1122 |
|
1107 | 1123 | Script = S3BootScriptGetEntryAddAddress (Length); |
@@ -1206,6 +1222,14 @@ S3BootScriptSavePciCfgWrite ( |
1206 | 1222 | } |
1207 | 1223 |
|
1208 | 1224 | WidthInByte = (UINT8) (0x01 << (Width & 0x03)); |
| 1225 | + |
| 1226 | + // |
| 1227 | + // Truncation check |
| 1228 | + // |
| 1229 | + if ((Count > MAX_UINT8) || |
| 1230 | + (WidthInByte * Count > MAX_UINT8 - sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE))) { |
| 1231 | + return RETURN_OUT_OF_RESOURCES; |
| 1232 | + } |
1209 | 1233 | Length = (UINT8)(sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE) + (WidthInByte * Count)); |
1210 | 1234 |
|
1211 | 1235 | Script = S3BootScriptGetEntryAddAddress (Length); |
@@ -1324,6 +1348,14 @@ S3BootScriptSavePciCfg2Write ( |
1324 | 1348 | } |
1325 | 1349 |
|
1326 | 1350 | WidthInByte = (UINT8) (0x01 << (Width & 0x03)); |
| 1351 | + |
| 1352 | + // |
| 1353 | + // Truncation check |
| 1354 | + // |
| 1355 | + if ((Count > MAX_UINT8) || |
| 1356 | + (WidthInByte * Count > MAX_UINT8 - sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE))) { |
| 1357 | + return RETURN_OUT_OF_RESOURCES; |
| 1358 | + } |
1327 | 1359 | Length = (UINT8)(sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE) + (WidthInByte * Count)); |
1328 | 1360 |
|
1329 | 1361 | Script = S3BootScriptGetEntryAddAddress (Length); |
@@ -1549,6 +1581,12 @@ S3BootScriptSaveSmbusExecute ( |
1549 | 1581 | return Status; |
1550 | 1582 | } |
1551 | 1583 |
|
| 1584 | + // |
| 1585 | + // Truncation check |
| 1586 | + // |
| 1587 | + if (BufferLength > MAX_UINT8 - sizeof (EFI_BOOT_SCRIPT_SMBUS_EXECUTE)) { |
| 1588 | + return RETURN_OUT_OF_RESOURCES; |
| 1589 | + } |
1552 | 1590 | DataSize = (UINT8)(sizeof (EFI_BOOT_SCRIPT_SMBUS_EXECUTE) + BufferLength); |
1553 | 1591 |
|
1554 | 1592 | Script = S3BootScriptGetEntryAddAddress (DataSize); |
@@ -1736,6 +1774,12 @@ S3BootScriptSaveInformation ( |
1736 | 1774 | UINT8 *Script; |
1737 | 1775 | EFI_BOOT_SCRIPT_INFORMATION ScriptInformation; |
1738 | 1776 |
|
| 1777 | + // |
| 1778 | + // Truncation check |
| 1779 | + // |
| 1780 | + if (InformationLength > MAX_UINT8 - sizeof (EFI_BOOT_SCRIPT_INFORMATION)) { |
| 1781 | + return RETURN_OUT_OF_RESOURCES; |
| 1782 | + } |
1739 | 1783 | Length = (UINT8)(sizeof (EFI_BOOT_SCRIPT_INFORMATION) + InformationLength); |
1740 | 1784 |
|
1741 | 1785 | Script = S3BootScriptGetEntryAddAddress (Length); |
@@ -2195,6 +2239,12 @@ S3BootScriptLabelInternal ( |
2195 | 2239 | UINT8 *Script; |
2196 | 2240 | EFI_BOOT_SCRIPT_INFORMATION ScriptInformation; |
2197 | 2241 |
|
| 2242 | + // |
| 2243 | + // Truncation check |
| 2244 | + // |
| 2245 | + if (InformationLength > MAX_UINT8 - sizeof (EFI_BOOT_SCRIPT_INFORMATION)) { |
| 2246 | + return RETURN_OUT_OF_RESOURCES; |
| 2247 | + } |
2198 | 2248 | Length = (UINT8)(sizeof (EFI_BOOT_SCRIPT_INFORMATION) + InformationLength); |
2199 | 2249 |
|
2200 | 2250 | Script = S3BootScriptGetEntryAddAddress (Length); |
|
0 commit comments