From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by mx.groups.io with SMTP id smtpd.web10.1546.1641521748107375532 for ; Thu, 06 Jan 2022 18:15:48 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Pk0Z2bhS; spf=pass (domain: gmail.com, ip: 209.85.215.169, mailfrom: kuqin12@gmail.com) Received: by mail-pg1-f169.google.com with SMTP id z30so689709pge.4 for ; Thu, 06 Jan 2022 18:15:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YoFPjwLfowBZpGXvLTrRjDQzGdleF2tAwxNRYYz4vXM=; b=Pk0Z2bhSpiuePHM3aJijU+lhZzFkPv7XctJqdR/8RUSSYplmaTY61P2n4ht6DvND/Z /EFIbSyqBZhtm+zmbfCK73GLJzxGyiG1dv5BeeVYXM/QgDIt7PGb6i6qA163I8JzS0kb NASErPWNQIOTjML9INPkVgEbm8QwIfnXDZn4M2U95EIi52OqOmnlK4+66SHpNO5MD1UZ bWQ1TLjGlpj5lIAzQnc4erJLidb03a/bKVqAs10hEFxoDFM1QHWnb4dcVHP675N6Rszm wlANUB3UEzvOtJikTPsXbyFE9AGpLnFx+x3YMBiwslM/S4DH1Ga8K/mjWy9T6v6MFnNy HKhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YoFPjwLfowBZpGXvLTrRjDQzGdleF2tAwxNRYYz4vXM=; b=eV6fH4rzwn3ovy+Ir9p9Vn6XUJfdoXk/3pBdy8KVqBC+Fn+NEnvScyCKNJyMTRXkfn tRrWbqXdXbQE4McOPKvzx3bKbkHXO367nQVslByOhyUn3xEPmoL1uEj6b3aeQNI0GiI/ DG5hIz3ROLpsxVHMjj0b6yLtHMdcjRkX6S6p8WjRQzlpApwVmB8/DPrr0557Gs1/VYtV c4fcWZWVZok3nyFVYEO66HvEPFjwn3I4DXVA2CfyoxyDSYAit3WH0iT6WYJGpvWDCryi kyNH1x9lQh0+EuqC1C5J9Ezdo5v787unW0X4Xtqyn8GIjl2cwynu4E5GrxEBNvSK7aGn 9riw== X-Gm-Message-State: AOAM532nwNedKLswxOOguYv0iXxCA7taFLs69Ouc+Oyp1Z5Jw80+hjkf Y+HkksK2/m01G8H1z31Z93qhpndga4M= X-Google-Smtp-Source: ABdhPJyenkgoDnVamXjCIThmrrqRPHaHUqQg7+bWcMZSYFRzmGzebfZa9xxXfj/6+fz4QWhoMCsEqA== X-Received: by 2002:aa7:8541:0:b0:4bb:b0f2:6134 with SMTP id y1-20020aa78541000000b004bbb0f26134mr57007038pfn.37.1641521747564; Thu, 06 Jan 2022 18:15:47 -0800 (PST) Return-Path: Received: from localhost.localdomain ([50.35.74.198]) by smtp.gmail.com with ESMTPSA id j3sm3894875pfc.196.2022.01.06.18.15.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Jan 2022 18:15:47 -0800 (PST) From: "Kun Qin" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Sami Mujawar , Jiewen Yao , Supreeth Venkatesh Subject: [PATCH v4 6/7] StandaloneMmPkg: StandaloneMmCore: Parsing new MM communicate header Date: Thu, 6 Jan 2022 18:15:31 -0800 Message-Id: <20220107021532.1322-7-kuqin12@gmail.com> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <20220107021532.1322-1-kuqin12@gmail.com> References: <20220107021532.1322-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 v4: - Rebased with uncrusitify changes. StandaloneMmPkg/Core/StandaloneMmCore.c | 35 ++++++++++++++++---- StandaloneMmPkg/Core/StandaloneMmCore.inf | 1 + 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.c b/StandaloneMmPkg/Core/StandaloneMmCore.c index d221f1d1115d..8afb22493cb2 100644 --- a/StandaloneMmPkg/Core/StandaloneMmCore.c +++ b/StandaloneMmPkg/Core/StandaloneMmCore.c @@ -338,8 +338,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")); @@ -377,19 +381,36 @@ 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 c44b9ff33303..e2e6cd32beee 100644 --- a/StandaloneMmPkg/Core/StandaloneMmCore.inf +++ b/StandaloneMmPkg/Core/StandaloneMmCore.inf @@ -75,6 +75,7 @@ [Guids] gEfiEventLegacyBootGuid gEfiEventExitBootServicesGuid gEfiEventReadyToBootGuid + gCommunicateHeaderV3Guid ## CONSUMES ## GUID # Communicate header # # This configuration fails for CLANGPDB, which does not support PIE in the GCC -- 2.34.1.windows.1