mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 11:13:53 +01:00 
			
		
		
		
	ShellPkg: acpiview: DBG2: Validate global pointers before use
Check if global (in the scope of the DBG2 parser) pointers have been successfully updated before they are used for further table parsing. Signed-off-by: Krzysztof Koch <krzysztof.koch@arm.com>
This commit is contained in:
		
							parent
							
								
									214bc6e206
								
							
						
					
					
						commit
						ccb4c38a50
					
				| @ -123,6 +123,24 @@ DumpDbgDeviceInfo ( | ||||
|     PARSER_PARAMS (DbgDevInfoParser) | ||||
|     ); | ||||
| 
 | ||||
|   // Check if the values used to control the parsing logic have been
 | ||||
|   // successfully read.
 | ||||
|   if ((GasCount == NULL)              || | ||||
|       (NameSpaceStringLength == NULL) || | ||||
|       (NameSpaceStringOffset == NULL) || | ||||
|       (OEMDataLength == NULL)         || | ||||
|       (OEMDataOffset == NULL)         || | ||||
|       (BaseAddrRegOffset == NULL)     || | ||||
|       (AddrSizeOffset == NULL)) { | ||||
|     IncrementErrorCount (); | ||||
|     Print ( | ||||
|       L"ERROR: Insufficient Debug Device Information Structure length. " \ | ||||
|         L"Length = %d.\n", | ||||
|       Length | ||||
|       ); | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   // GAS
 | ||||
|   Index = 0; | ||||
|   Offset = *BaseAddrRegOffset; | ||||
| @ -224,6 +242,18 @@ ParseAcpiDbg2 ( | ||||
|              PARSER_PARAMS (Dbg2Parser) | ||||
|              ); | ||||
| 
 | ||||
|   // Check if the values used to control the parsing logic have been
 | ||||
|   // successfully read.
 | ||||
|   if ((OffsetDbgDeviceInfo == NULL) || | ||||
|       (NumberDbgDeviceInfo == NULL)) { | ||||
|     IncrementErrorCount (); | ||||
|     Print ( | ||||
|       L"ERROR: Insufficient table length. AcpiTableLength = %d\n", | ||||
|       AcpiTableLength | ||||
|       ); | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   Offset = *OffsetDbgDeviceInfo; | ||||
|   Index = 0; | ||||
| 
 | ||||
| @ -239,6 +269,19 @@ ParseAcpiDbg2 ( | ||||
|       PARSER_PARAMS (DbgDevInfoHeaderParser) | ||||
|       ); | ||||
| 
 | ||||
|     // Check if the values used to control the parsing logic have been
 | ||||
|     // successfully read.
 | ||||
|     if (DbgDevInfoLen == NULL) { | ||||
|       IncrementErrorCount (); | ||||
|       Print ( | ||||
|         L"ERROR: Insufficient remaining table buffer length to read the " \ | ||||
|           L"Debug Device Information structure's 'Length' field. " \ | ||||
|           L"RemainingTableBufferLength = %d.\n", | ||||
|         AcpiTableLength - Offset | ||||
|         ); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     // Make sure the Debug Device Information structure lies inside the table.
 | ||||
|     if ((Offset + *DbgDevInfoLen) > AcpiTableLength) { | ||||
|       IncrementErrorCount (); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user