From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) by mx.groups.io with SMTP id smtpd.web09.5407.1624006978675144809 for ; Fri, 18 Jun 2021 02:02:58 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20161025 header.b=FKqfGicL; spf=pass (domain: gmail.com, ip: 209.85.216.52, mailfrom: kuqin12@gmail.com) Received: by mail-pj1-f52.google.com with SMTP id 13-20020a17090a08cdb029016eed209ca4so5495689pjn.1 for ; Fri, 18 Jun 2021 02:02:58 -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=+8tzFIFe9MTss0x+p+GVKCd2iXWkU8ZMwGa3XX1ffSM=; b=FKqfGicL04ozD8p3gR7qF0BlufLMqsIyvC0l88NitSyQhwgHU6USdRIPm+pmaYPOAw EetdpaRlc/hRDLvxpEC4LjejUAKBHhkFVuNk8dSzsUJ4f1McLfqrHdh82nIai3Z5Yi/k ZH19G+EADrsqhTYgTGTdcwz4+jcxmTu6cgJm97rTo/xLEnTsiQ/ep1rxtg8wZIhUZnz1 U0aQ3xQWcSUbiwbnnFD8rnlIv/xlJt/Qc2XnxHHEJgk2Y8xPZW98kKkNJw6aFKu0itZL E4KVFVMCNf2Ad15GxwMgyI4FrVnFWQK8R1xeTEEXiQVzVqCRdDlqY6UIpJUue7I90k/+ XwWg== 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=+8tzFIFe9MTss0x+p+GVKCd2iXWkU8ZMwGa3XX1ffSM=; b=fhKAGVqk+639gbqraItzSZzH9OqPQaktTPx7N7fjI/sQdD8DMZ7/zH/h5SYtr28MQk yQ73Kdbh6TXD1dkwMxou+W/2CIV3gRZDRzzH7kTf6SuvCATUgnrfdSelmFn5s4+LWPKu Dvcacb7/v8hxifcqJP10Aw2awwTB1017buUJUE+MFxKNrvCSvfBO+tgIZB0/qJ8Q7NrS tF7DqVbXzWe/XE9pvj3Fus2wK3zOeLPhXsL7SvSKN3kAsuMgFnkOp6Zx/CFNlHPyh+JH Bs/qPq/9MWAnqAdDQy8Gu5Ag/9gaka3BlQrXdbSNunQ2kkEfDB2blhDT/psP+edQa9kU tqnA== X-Gm-Message-State: AOAM530XroXpWbsyy2OzQc6gYtboJMKWKF1UjdcUzFD17UIBQzR/Xtkt lngyb9akQBzbRj0L1KtPbRZpmQc5j+vb2g== X-Google-Smtp-Source: ABdhPJw/Ab2pMY57qQEYRmcfVcjsTQgS7rFWnmIsUP2Oxw41n9nY6ABKiiaIWK+Bu2gqy2rLn7mOsQ== X-Received: by 2002:a17:902:ea0d:b029:fb:973:956a with SMTP id s13-20020a170902ea0db02900fb0973956amr3890194plg.79.1624006977971; Fri, 18 Jun 2021 02:02:57 -0700 (PDT) Return-Path: Received: from localhost.localdomain ([50.35.88.161]) by smtp.gmail.com with ESMTPSA id b1sm7702512pgb.91.2021.06.18.02.02.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Jun 2021 02:02:57 -0700 (PDT) From: "Kun Qin" To: devel@edk2.groups.io Cc: Jian J Wang , Hao A Wu Subject: [PATCH v2 3/6] MdeModulePkg: MemoryProfileInfo: Updated MessageLength calculation Date: Fri, 18 Jun 2021 02:02:40 -0700 Message-Id: <20210618090243.2517-4-kuqin12@gmail.com> X-Mailer: git-send-email 2.31.1.windows.1 In-Reply-To: <20210618090243.2517-1-kuqin12@gmail.com> References: <20210618090243.2517-1-kuqin12@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3398 This change replaced the calculation of communication buffer size from explicitly adding the size of each member with the OFFSET macro function. This will make the structure field defition change transparent to consumers. Cc: Jian J Wang Cc: Hao A Wu Signed-off-by: Kun Qin --- Notes: v2: - Added a missed case this change should cover [Hao] - Removed "BZ" tags from comments [Hao] MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.c | 28 +++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.c b/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.c index 191c31068545..69f78c090e7c 100644 --- a/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.c +++ b/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.c @@ -1140,8 +1140,7 @@ GetSmramProfileData ( return Status; } - MinimalSizeNeeded = sizeof (EFI_GUID) + - sizeof (UINTN) + + MinimalSizeNeeded = OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data) + MAX (sizeof (SMRAM_PROFILE_PARAMETER_GET_PROFILE_INFO), MAX (sizeof (SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA_BY_OFFSET), sizeof (SMRAM_PROFILE_PARAMETER_RECORDING_STATE))); @@ -1190,7 +1189,10 @@ GetSmramProfileData ( CommRecordingState->Header.ReturnStatus = (UINT64)-1; CommRecordingState->RecordingState = MEMORY_PROFILE_RECORDING_DISABLE; - CommSize = sizeof (EFI_GUID) + sizeof (UINTN) + CommHeader->MessageLength; + // + // The CommHeader->MessageLength contains a definitive value, thus UINTN cast is safe here. + // + CommSize = OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)CommHeader->MessageLength; Status = SmmCommunication->Communicate (SmmCommunication, CommBuffer, &CommSize); if (EFI_ERROR (Status)) { DEBUG ((EFI_D_ERROR, "SmramProfile: SmmCommunication - %r\n", Status)); @@ -1213,7 +1215,10 @@ GetSmramProfileData ( CommRecordingState->Header.ReturnStatus = (UINT64)-1; CommRecordingState->RecordingState = MEMORY_PROFILE_RECORDING_DISABLE; - CommSize = sizeof (EFI_GUID) + sizeof (UINTN) + CommHeader->MessageLength; + // + // The CommHeader->MessageLength contains a definitive value, thus UINTN cast is safe here. + // + CommSize = OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)CommHeader->MessageLength; SmmCommunication->Communicate (SmmCommunication, CommBuffer, &CommSize); } @@ -1230,7 +1235,10 @@ GetSmramProfileData ( CommGetProfileInfo->Header.ReturnStatus = (UINT64)-1; CommGetProfileInfo->ProfileSize = 0; - CommSize = sizeof (EFI_GUID) + sizeof (UINTN) + CommHeader->MessageLength; + // + // The CommHeader->MessageLength contains a definitive value, thus UINTN cast is safe here. + // + CommSize = OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)CommHeader->MessageLength; Status = SmmCommunication->Communicate (SmmCommunication, CommBuffer, &CommSize); ASSERT_EFI_ERROR (Status); @@ -1261,7 +1269,10 @@ GetSmramProfileData ( CommGetProfileData->Header.DataLength = sizeof (*CommGetProfileData); CommGetProfileData->Header.ReturnStatus = (UINT64)-1; - CommSize = sizeof (EFI_GUID) + sizeof (UINTN) + CommHeader->MessageLength; + // + // The CommHeader->MessageLength contains a definitive value, thus UINTN cast is safe here. + // + CommSize = OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)CommHeader->MessageLength; Buffer = (UINT8 *) CommHeader + CommSize; Size -= CommSize; @@ -1320,7 +1331,10 @@ GetSmramProfileData ( CommRecordingState->Header.ReturnStatus = (UINT64)-1; CommRecordingState->RecordingState = MEMORY_PROFILE_RECORDING_ENABLE; - CommSize = sizeof (EFI_GUID) + sizeof (UINTN) + CommHeader->MessageLength; + // + // The CommHeader->MessageLength contains a definitive value, thus UINTN cast is safe here. + // + CommSize = OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)CommHeader->MessageLength; SmmCommunication->Communicate (SmmCommunication, CommBuffer, &CommSize); } -- 2.31.1.windows.1