Add error handling when the IdMappingCount is not zero and the IdMappingToken is NULL.
Signed-off-by: Sami Mujawar <sami.muja...@arm.com> --- Notes: v6: - No changes since v3. Resending with v6 series. [SAMI] v5: - No changes since v3. Resending with v5 series. [SAMI] v4: - No changes since v3. Resending with v4 series. [SAMI] v3: - New patch in this series. Moves error handling code for [SAMI] IdMappingToken from patch v2 6/8 and v2 8/8 into this patch. Ref: https://edk2.groups.io/g/devel/topic/83600728#76662 https://edk2.groups.io/g/devel/topic/83600726#76661 DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c | 82 ++++++++++++++++---- 1 file changed, 66 insertions(+), 16 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c index 0f13c32b838bf4fe42b53a1e9c3ce817d74681fb..daf9ff00c3deab4005814bbfcf1650469d1e7d92 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c @@ -1,7 +1,7 @@ /** @file IORT Table Generator - Copyright (c) 2017 - 2020, ARM Limited. All rights reserved. + Copyright (c) 2017 - 2022, Arm Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @par Reference(s): @@ -905,9 +905,19 @@ AddNamedComponentNodes ( return Status; } - if ((NodeList->IdMappingCount > 0) && - (NodeList->IdMappingToken != CM_NULL_TOKEN)) - { + if (NodeList->IdMappingCount > 0) { + if (NodeList->IdMappingToken == CM_NULL_TOKEN) { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Invalid Id Mapping token," + " Token = 0x%x, Status =%r\n", + NodeList->IdMappingToken, + Status + )); + return Status; + } + // Ids for Named Component IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)NcNode + NcNode->Node.IdReference); @@ -1011,9 +1021,19 @@ AddRootComplexNodes ( RcNode->Reserved1[1] = EFI_ACPI_RESERVED_BYTE; RcNode->Reserved1[2] = EFI_ACPI_RESERVED_BYTE; - if ((NodeList->IdMappingCount > 0) && - (NodeList->IdMappingToken != CM_NULL_TOKEN)) - { + if (NodeList->IdMappingCount > 0) { + if (NodeList->IdMappingToken == CM_NULL_TOKEN) { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Invalid Id Mapping token," + " Token = 0x%x, Status =%r\n", + NodeList->IdMappingToken, + Status + )); + return Status; + } + // Ids for Root Complex IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)RcNode + RcNode->Node.IdReference); @@ -1242,9 +1262,19 @@ AddSmmuV1V2Nodes ( } } - if ((NodeList->IdMappingCount > 0) && - (NodeList->IdMappingToken != CM_NULL_TOKEN)) - { + if (NodeList->IdMappingCount > 0) { + if (NodeList->IdMappingToken == CM_NULL_TOKEN) { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Invalid Id Mapping token," + " Token = 0x%x, Status =%r\n", + NodeList->IdMappingToken, + Status + )); + return Status; + } + // Ids for SMMU v1/v2 Node IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)SmmuNode + SmmuNode->Node.IdReference); @@ -1361,9 +1391,19 @@ AddSmmuV3Nodes ( SmmuV3Node->DeviceIdMappingIndex = NodeList->DeviceIdMappingIndex; } - if ((NodeList->IdMappingCount > 0) && - (NodeList->IdMappingToken != CM_NULL_TOKEN)) - { + if (NodeList->IdMappingCount > 0) { + if (NodeList->IdMappingToken == CM_NULL_TOKEN) { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Invalid Id Mapping token," + " Token = 0x%x, Status =%r\n", + NodeList->IdMappingToken, + Status + )); + return Status; + } + // Ids for SMMUv3 node IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)SmmuV3Node + SmmuV3Node->Node.IdReference); @@ -1476,9 +1516,19 @@ AddPmcgNodes ( return Status; } - if ((NodeList->IdMappingCount > 0) && - (NodeList->IdMappingToken != CM_NULL_TOKEN)) - { + if (NodeList->IdMappingCount > 0) { + if (NodeList->IdMappingToken == CM_NULL_TOKEN) { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: IORT: Invalid Id Mapping token," + " Token = 0x%x, Status =%r\n", + NodeList->IdMappingToken, + Status + )); + return Status; + } + // Ids for PMCG node IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)PmcgNode + PmcgNode->Node.IdReference); -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#91357): https://edk2.groups.io/g/devel/message/91357 Mute This Topic: https://groups.io/mt/92383462/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-