]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Dbg2/Dbg2Parser.c
ShellPkg: acpiview: DBG2: Validate global pointers before use
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / Parsers / Dbg2 / Dbg2Parser.c
index 869e700b9beda4886bf7bc5ae4ced3ab9a59efa3..0f730a306a94329a23fbaf54b59f1833b44616ba 100644 (file)
@@ -123,6 +123,24 @@ DumpDbgDeviceInfo (
     PARSER_PARAMS (DbgDevInfoParser)\r
     );\r
 \r
+  // Check if the values used to control the parsing logic have been\r
+  // successfully read.\r
+  if ((GasCount == NULL)              ||\r
+      (NameSpaceStringLength == NULL) ||\r
+      (NameSpaceStringOffset == NULL) ||\r
+      (OEMDataLength == NULL)         ||\r
+      (OEMDataOffset == NULL)         ||\r
+      (BaseAddrRegOffset == NULL)     ||\r
+      (AddrSizeOffset == NULL)) {\r
+    IncrementErrorCount ();\r
+    Print (\r
+      L"ERROR: Insufficient Debug Device Information Structure length. " \\r
+        L"Length = %d.\n",\r
+      Length\r
+      );\r
+    return;\r
+  }\r
+\r
   // GAS\r
   Index = 0;\r
   Offset = *BaseAddrRegOffset;\r
@@ -224,6 +242,18 @@ ParseAcpiDbg2 (
              PARSER_PARAMS (Dbg2Parser)\r
              );\r
 \r
+  // Check if the values used to control the parsing logic have been\r
+  // successfully read.\r
+  if ((OffsetDbgDeviceInfo == NULL) ||\r
+      (NumberDbgDeviceInfo == NULL)) {\r
+    IncrementErrorCount ();\r
+    Print (\r
+      L"ERROR: Insufficient table length. AcpiTableLength = %d\n",\r
+      AcpiTableLength\r
+      );\r
+    return;\r
+  }\r
+\r
   Offset = *OffsetDbgDeviceInfo;\r
   Index = 0;\r
 \r
@@ -239,6 +269,19 @@ ParseAcpiDbg2 (
       PARSER_PARAMS (DbgDevInfoHeaderParser)\r
       );\r
 \r
+    // Check if the values used to control the parsing logic have been\r
+    // successfully read.\r
+    if (DbgDevInfoLen == NULL) {\r
+      IncrementErrorCount ();\r
+      Print (\r
+        L"ERROR: Insufficient remaining table buffer length to read the " \\r
+          L"Debug Device Information structure's 'Length' field. " \\r
+          L"RemainingTableBufferLength = %d.\n",\r
+        AcpiTableLength - Offset\r
+        );\r
+      return;\r
+    }\r
+\r
     // Make sure the Debug Device Information structure lies inside the table.\r
     if ((Offset + *DbgDevInfoLen) > AcpiTableLength) {\r
       IncrementErrorCount ();\r