DynamicTablesPkg: Fix multiple objects parsing

When a CmObjDesc contains multiple objects, only the first one is
parsed as the buffer doesn't progress. Fix this.
Also check that the whole buffer has been parsed with an asset.

Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
Pierre Gondois 2021-12-09 10:25:05 +01:00 committed by mergify[bot]
parent e35a746cf5
commit ec37fd9c1f
1 changed files with 13 additions and 1 deletions

View File

@ -688,6 +688,7 @@ ParseCmObjDesc (
UINT32 ObjIndex;
UINT32 ObjectCount;
INTN RemainingSize;
INTN Offset;
CONST CM_OBJ_PARSER_ARRAY *ParserArray;
if ((CmObjDesc == NULL) || (CmObjDesc->Data == NULL)) {
@ -722,6 +723,7 @@ ParseCmObjDesc (
ObjectCount = CmObjDesc->Count;
RemainingSize = CmObjDesc->Size;
Offset = 0;
for (ObjIndex = 0; ObjIndex < ObjectCount; ObjIndex++) {
DEBUG ((
@ -733,11 +735,21 @@ ParseCmObjDesc (
ObjectCount
));
PrintCmObjDesc (
CmObjDesc->Data,
(VOID *)((UINTN)CmObjDesc->Data + Offset),
ParserArray->Parser,
ParserArray->ItemCount,
&RemainingSize,
1
);
if ((RemainingSize > CmObjDesc->Size) ||
(RemainingSize < 0))
{
ASSERT (0);
return;
}
Offset = CmObjDesc->Size - RemainingSize;
} // for
ASSERT (RemainingSize == 0);
}