From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by mx.groups.io with SMTP id smtpd.web12.35401.1629176930760618519 for ; Mon, 16 Aug 2021 22:08:50 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20161025 header.b=WyEQaf1S; spf=pass (domain: gmail.com, ip: 209.85.214.178, mailfrom: kuqin12@gmail.com) Received: by mail-pl1-f178.google.com with SMTP id q2so23440399plr.11 for ; Mon, 16 Aug 2021 22:08:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SosND0uTNM1VBRlph/+oVz2kFEu8ijii4c3vReb0BGI=; b=WyEQaf1SGVzuBckyp+SH0Qd8hArAktmwrli3ZzEMwod2f/Mm5WXyuPaOfIW2f+XxNB oQDSyUpH9LpRgkUVzfaW6eNSwWrxcAtJInw5wiNLNsnTF6NC032wWcno0rIGab/GkIht MH0wEprVY1tr//jzfxgwfDAmp2r6RNs3HwurYBtAsUisUEj3CyRXNzF+RryKLqe2DmVG 4xHaWzfPABdtYPUIWdQzb4nzMqpjAc+htxdtUVvOAPbvdT6DVp9SEmL6IUz1HZSTsYy+ tk7r9btdF1BS0vh+Ks12351iPTABChbwJdrp7wVhlIH7i83WN9hqbU1im0CmHHFPKoWG bfzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SosND0uTNM1VBRlph/+oVz2kFEu8ijii4c3vReb0BGI=; b=LT0/fIdYSFGr1+E7q0oKvSSXdZSVDVeAaYMEau3IMAyY+WQys7ct6/rFp3b98uHaAr 6NhusoLfp1vetdbyae44le+U1gK6H6uvOnGDzjop3/OM3YsENiBVJF37wtE6OXVeGVTB c5Khsab6HJTSv01sdZHsXu1tHMZpz34X+EMr4cUDL6gzG3zgBo8kseVEXBs1ZeMVpoMy PUuA652FXunemHb+uf9Hqucpbo1jI7AjWHZEiMH5QI9/6XRK7HFFlBoDeDJsdgDQ/wa/ 97DvD+H6shRKS2Wj6vkhb7F5MglwNn6vsgeqlPI504qcyRp4tqicgwfN6po1EK2rVMVy HKGQ== X-Gm-Message-State: AOAM532MLN68jXCDZMBrCZV9wyghsjW/vkra3n3jbpXgMuSl+xE7VA3p opE0Gm1AakcVBIthB+o+oiOasrf6zZOPjw== X-Google-Smtp-Source: ABdhPJzwL+FyXL7FKCB005SAnXsjNtMJV8vydXbOmg0TyooMoPMuUmB/LdC5MZy5NAA1kRQl5eBCxA== X-Received: by 2002:a17:90b:250f:: with SMTP id ns15mr1714415pjb.26.1629176930225; Mon, 16 Aug 2021 22:08:50 -0700 (PDT) Return-Path: Received: from localhost.localdomain ([50.35.88.161]) by smtp.gmail.com with ESMTPSA id i5sm737965pjk.47.2021.08.16.22.08.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Aug 2021 22:08:49 -0700 (PDT) From: "Kun Qin" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Sami Mujawar , Jiewen Yao , Supreeth Venkatesh Subject: [PATCH v3 6/7] StandaloneMmPkg: StandaloneMmCore: Parsing new MM communicate header Date: Mon, 16 Aug 2021 22:08:06 -0700 Message-Id: <20210817050807.766-7-kuqin12@gmail.com> X-Mailer: git-send-email 2.32.0.windows.1 In-Reply-To: <20210817050807.766-1-kuqin12@gmail.com> References: <20210817050807.766-1-kuqin12@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3398 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3430 MM communicate protocols are expanded with EFI_MM_COMMUNICATE_HEADER_V3 structure that cooperates with updated field types and flexible array. The PiSmmCore implementation is updated to detect and process incoming data accordingly. Two checks are also performed to prevent legacy communicate data or unsupported data is fed into MM core under agreed header guid. Cc: Ard Biesheuvel Cc: Sami Mujawar Cc: Jiewen Yao Cc: Supreeth Venkatesh Signed-off-by: Kun Qin --- Notes: v3: - Newly added StandaloneMmPkg/Core/StandaloneMmCore.c | 34 ++++++++++++++++---- StandaloneMmPkg/Core/StandaloneMmCore.inf | 1 + 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.c b/StandaloneMmPkg/Core/StandaloneMmCore.c index fbb0ec75e557..000aca098cc8 100644 --- a/StandaloneMmPkg/Core/StandaloneMmCore.c +++ b/StandaloneMmPkg/Core/StandaloneMmCore.c @@ -340,8 +340,12 @@ MmEntryPoint ( IN CONST EFI_MM_ENTRY_CONTEXT *MmEntryContext ) { - EFI_STATUS Status; - EFI_MM_COMMUNICATE_HEADER *CommunicateHeader; + EFI_STATUS Status; + EFI_MM_COMMUNICATE_HEADER_V3 *CommunicateHeader; + EFI_MM_COMMUNICATE_HEADER *LegacyCommunicateHeader; + EFI_GUID *CommGuid; + VOID *CommData; + UINTN CommHeaderSize; DEBUG ((DEBUG_INFO, "MmEntryPoint ...\n")); @@ -379,19 +383,35 @@ MmEntryPoint ( gMmCorePrivate->CommunicationBuffer = 0; gMmCorePrivate->ReturnStatus = EFI_INVALID_PARAMETER; } else { - CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)(UINTN)gMmCorePrivate->CommunicationBuffer; - gMmCorePrivate->BufferSize -= OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data); + CommGuid = &((EFI_MM_COMMUNICATE_HEADER_V3 *)(UINTN)gMmCorePrivate->CommunicationBuffer)->HeaderGuid; + // + // Check if the signature matches EFI_MM_COMMUNICATE_HEADER_V3 definition + // + if (CompareGuid (CommGuid, &gCommunicateHeaderV3Guid)) { + CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER_V3 *)(UINTN)gMmCorePrivate->CommunicationBuffer; + ASSERT (CommunicateHeader->Signature == EFI_MM_COMMUNICATE_HEADER_V3_SIGNATURE); + ASSERT (CommunicateHeader->Version <= EFI_MM_COMMUNICATE_HEADER_V3_VERSION); + CommGuid = &CommunicateHeader->MessageGuid; + CommData = CommunicateHeader->MessageData; + CommHeaderSize = sizeof (EFI_MM_COMMUNICATE_HEADER_V3); + } else { + LegacyCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)(UINTN)gMmCorePrivate->CommunicationBuffer; + CommGuid = &LegacyCommunicateHeader->HeaderGuid; + CommData = LegacyCommunicateHeader->Data; + CommHeaderSize = OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data); + } + gMmCorePrivate->BufferSize -= CommHeaderSize; Status = MmiManage ( - &CommunicateHeader->HeaderGuid, + CommGuid, NULL, - CommunicateHeader->Data, + CommData, (UINTN *)&gMmCorePrivate->BufferSize ); // // Update CommunicationBuffer, BufferSize and ReturnStatus // Communicate service finished, reset the pointer to CommBuffer to NULL // - gMmCorePrivate->BufferSize += OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data); + gMmCorePrivate->BufferSize += CommHeaderSize; gMmCorePrivate->CommunicationBuffer = 0; gMmCorePrivate->ReturnStatus = (Status == EFI_SUCCESS) ? EFI_SUCCESS : EFI_NOT_FOUND; } diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.inf b/StandaloneMmPkg/Core/StandaloneMmCore.inf index 56042b7b39f4..41a49e23fa8f 100644 --- a/StandaloneMmPkg/Core/StandaloneMmCore.inf +++ b/StandaloneMmPkg/Core/StandaloneMmCore.inf @@ -75,6 +75,7 @@ [Guids] gEfiEventLegacyBootGuid gEfiEventExitBootServicesGuid gEfiEventReadyToBootGuid + gCommunicateHeaderV3Guid ## CONSUMES ## GUID # Communicate header [BuildOptions] GCC:*_*_*_CC_FLAGS = -fpie -- 2.32.0.windows.1