]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c
DynamicTablesPkg: Handle error when IdMappingToken is NULL
[mirror_edk2.git] / DynamicTablesPkg / Library / Acpi / Arm / AcpiIortLibArm / IortGenerator.c
index 0f13c32b838bf4fe42b53a1e9c3ce817d74681fb..daf9ff00c3deab4005814bbfcf1650469d1e7d92 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   IORT Table Generator\r
 \r
-  Copyright (c) 2017 - 2020, ARM Limited. All rights reserved.\r
+  Copyright (c) 2017 - 2022, Arm Limited. All rights reserved.\r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
   @par Reference(s):\r
@@ -905,9 +905,19 @@ AddNamedComponentNodes (
       return Status;\r
     }\r
 \r
-    if ((NodeList->IdMappingCount > 0) &&\r
-        (NodeList->IdMappingToken != CM_NULL_TOKEN))\r
-    {\r
+    if (NodeList->IdMappingCount > 0) {\r
+      if (NodeList->IdMappingToken == CM_NULL_TOKEN) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        DEBUG ((\r
+          DEBUG_ERROR,\r
+          "ERROR: IORT: Invalid Id Mapping token,"\r
+          " Token = 0x%x, Status =%r\n",\r
+          NodeList->IdMappingToken,\r
+          Status\r
+          ));\r
+        return Status;\r
+      }\r
+\r
       // Ids for Named Component\r
       IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)NcNode +\r
                                                           NcNode->Node.IdReference);\r
@@ -1011,9 +1021,19 @@ AddRootComplexNodes (
     RcNode->Reserved1[1]      = EFI_ACPI_RESERVED_BYTE;\r
     RcNode->Reserved1[2]      = EFI_ACPI_RESERVED_BYTE;\r
 \r
-    if ((NodeList->IdMappingCount > 0) &&\r
-        (NodeList->IdMappingToken != CM_NULL_TOKEN))\r
-    {\r
+    if (NodeList->IdMappingCount > 0) {\r
+      if (NodeList->IdMappingToken == CM_NULL_TOKEN) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        DEBUG ((\r
+          DEBUG_ERROR,\r
+          "ERROR: IORT: Invalid Id Mapping token,"\r
+          " Token = 0x%x, Status =%r\n",\r
+          NodeList->IdMappingToken,\r
+          Status\r
+          ));\r
+        return Status;\r
+      }\r
+\r
       // Ids for Root Complex\r
       IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)RcNode +\r
                                                           RcNode->Node.IdReference);\r
@@ -1242,9 +1262,19 @@ AddSmmuV1V2Nodes (
       }\r
     }\r
 \r
-    if ((NodeList->IdMappingCount > 0) &&\r
-        (NodeList->IdMappingToken != CM_NULL_TOKEN))\r
-    {\r
+    if (NodeList->IdMappingCount > 0) {\r
+      if (NodeList->IdMappingToken == CM_NULL_TOKEN) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        DEBUG ((\r
+          DEBUG_ERROR,\r
+          "ERROR: IORT: Invalid Id Mapping token,"\r
+          " Token = 0x%x, Status =%r\n",\r
+          NodeList->IdMappingToken,\r
+          Status\r
+          ));\r
+        return Status;\r
+      }\r
+\r
       // Ids for SMMU v1/v2 Node\r
       IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)SmmuNode +\r
                                                           SmmuNode->Node.IdReference);\r
@@ -1361,9 +1391,19 @@ AddSmmuV3Nodes (
       SmmuV3Node->DeviceIdMappingIndex = NodeList->DeviceIdMappingIndex;\r
     }\r
 \r
-    if ((NodeList->IdMappingCount > 0) &&\r
-        (NodeList->IdMappingToken != CM_NULL_TOKEN))\r
-    {\r
+    if (NodeList->IdMappingCount > 0) {\r
+      if (NodeList->IdMappingToken == CM_NULL_TOKEN) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        DEBUG ((\r
+          DEBUG_ERROR,\r
+          "ERROR: IORT: Invalid Id Mapping token,"\r
+          " Token = 0x%x, Status =%r\n",\r
+          NodeList->IdMappingToken,\r
+          Status\r
+          ));\r
+        return Status;\r
+      }\r
+\r
       // Ids for SMMUv3 node\r
       IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)SmmuV3Node +\r
                                                           SmmuV3Node->Node.IdReference);\r
@@ -1476,9 +1516,19 @@ AddPmcgNodes (
       return Status;\r
     }\r
 \r
-    if ((NodeList->IdMappingCount > 0) &&\r
-        (NodeList->IdMappingToken != CM_NULL_TOKEN))\r
-    {\r
+    if (NodeList->IdMappingCount > 0) {\r
+      if (NodeList->IdMappingToken == CM_NULL_TOKEN) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        DEBUG ((\r
+          DEBUG_ERROR,\r
+          "ERROR: IORT: Invalid Id Mapping token,"\r
+          " Token = 0x%x, Status =%r\n",\r
+          NodeList->IdMappingToken,\r
+          Status\r
+          ));\r
+        return Status;\r
+      }\r
+\r
       // Ids for PMCG node\r
       IdMapArray = (EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE *)((UINT8 *)PmcgNode +\r
                                                           PmcgNode->Node.IdReference);\r