MdeModulePkg: VariableSmmRuntimeDxe: Fix Variable Policy Message Length
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3709 In EDKII implementation of variable policy, the DXE runtime agent would communicate to MM to disable, register or query policies. However, these operations populate the value of MessageLength that includes communicate header to include MM communicate header, which mismatches with the description of PI specification. This fix will correct the MessageLength field calculation to exclude the size of MM_COMMUNICATE_HEADER. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> Cc: Michael Kubacki <michael.kubacki@microsoft.com> Signed-off-by: Kun Qin <kuqin12@gmail.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
@@ -89,7 +89,7 @@ ProtocolDisableVariablePolicy (
|
|||||||
CommHeader = mMmCommunicationBuffer;
|
CommHeader = mMmCommunicationBuffer;
|
||||||
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
||||||
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
||||||
CommHeader->MessageLength = BufferSize;
|
CommHeader->MessageLength = BufferSize - OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
||||||
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
||||||
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
||||||
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_DISABLE;
|
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_DISABLE;
|
||||||
@@ -138,7 +138,7 @@ ProtocolIsVariablePolicyEnabled (
|
|||||||
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
||||||
CommandParams = (VAR_CHECK_POLICY_COMM_IS_ENABLED_PARAMS *)(PolicyHeader + 1);
|
CommandParams = (VAR_CHECK_POLICY_COMM_IS_ENABLED_PARAMS *)(PolicyHeader + 1);
|
||||||
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
||||||
CommHeader->MessageLength = BufferSize;
|
CommHeader->MessageLength = BufferSize - OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
||||||
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
||||||
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
||||||
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_IS_ENABLED;
|
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_IS_ENABLED;
|
||||||
@@ -213,7 +213,7 @@ ProtocolRegisterVariablePolicy (
|
|||||||
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
||||||
PolicyBuffer = (VOID *)(PolicyHeader + 1);
|
PolicyBuffer = (VOID *)(PolicyHeader + 1);
|
||||||
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
||||||
CommHeader->MessageLength = BufferSize;
|
CommHeader->MessageLength = BufferSize - OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
||||||
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
||||||
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
||||||
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_REGISTER;
|
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_REGISTER;
|
||||||
@@ -270,7 +270,7 @@ DumpVariablePolicyHelper (
|
|||||||
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
||||||
CommandParams = (VAR_CHECK_POLICY_COMM_DUMP_PARAMS *)(PolicyHeader + 1);
|
CommandParams = (VAR_CHECK_POLICY_COMM_DUMP_PARAMS *)(PolicyHeader + 1);
|
||||||
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
||||||
CommHeader->MessageLength = BufferSize;
|
CommHeader->MessageLength = BufferSize - OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
||||||
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
||||||
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
||||||
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_DUMP;
|
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_DUMP;
|
||||||
@@ -397,7 +397,7 @@ ProtocolLockVariablePolicy (
|
|||||||
CommHeader = mMmCommunicationBuffer;
|
CommHeader = mMmCommunicationBuffer;
|
||||||
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
PolicyHeader = (VAR_CHECK_POLICY_COMM_HEADER *)&CommHeader->Data;
|
||||||
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
CopyGuid (&CommHeader->HeaderGuid, &gVarCheckPolicyLibMmiHandlerGuid);
|
||||||
CommHeader->MessageLength = BufferSize;
|
CommHeader->MessageLength = BufferSize - OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
||||||
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
PolicyHeader->Signature = VAR_CHECK_POLICY_COMM_SIG;
|
||||||
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
PolicyHeader->Revision = VAR_CHECK_POLICY_COMM_REVISION;
|
||||||
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_LOCK;
|
PolicyHeader->Command = VAR_CHECK_POLICY_COMMAND_LOCK;
|
||||||
|
Reference in New Issue
Block a user