Your threshold is slightly lower than mine for adding the local variable. My 
test plan is already
done on this patch series. Do you consider this mandatory?

Thanks,
Michael

> -----Original Message-----
> From: Wu, Hao A <hao.a...@intel.com>
> Sent: Wednesday, October 16, 2019 6:01 PM
> To: Kubacki, Michael A <michael.a.kuba...@intel.com>;
> devel@edk2.groups.io
> Cc: Bi, Dandan <dandan...@intel.com>; Ard Biesheuvel
> <ard.biesheu...@linaro.org>; Dong, Eric <eric.d...@intel.com>; Laszlo Ersek
> <ler...@redhat.com>; Gao, Liming <liming....@intel.com>; Kinney, Michael
> D <michael.d.kin...@intel.com>; Ni, Ray <ray...@intel.com>; Wang, Jian J
> <jian.j.w...@intel.com>; Yao, Jiewen <jiewen....@intel.com>
> Subject: RE: [PATCH V4 04/10] MdeModulePkg/Variable: Parameterize auth
> status in VariableParsing
> 
> > -----Original Message-----
> > From: Kubacki, Michael A
> > Sent: Tuesday, October 15, 2019 7:30 AM
> > To: devel@edk2.groups.io
> > Cc: Bi, Dandan; Ard Biesheuvel; Dong, Eric; Laszlo Ersek; Gao, Liming;
> Kinney,
> > Michael D; Ni, Ray; Wang, Jian J; Wu, Hao A; Yao, Jiewen
> > Subject: [PATCH V4 04/10] MdeModulePkg/Variable: Parameterize auth
> > status in VariableParsing
> >
> > The file VariableParsing.c provides generic functionality related
> > to parsing variable related structures and information. In order to
> > calculate offsets for certain operations, the functions must know if
> > authenticated variables are enabled as this increases the size of
> > variable headers.
> >
> > This change removes linking against a global variable in an external file
> > in favor of passing the authenticated variable status as a parameter to
> > the variable parsing functions.
> 
> 
> One general level comment:
> In this patch some of the functions have introduced a local variable
> 'AuthFormat'
> to reduce the repetitive occurrence of:
> 
> mVariableModuleGlobal->VariableGlobal.AuthFormat
> 
> I would suggest to adopt this approach for all the functions that have 3 or
> more
> of such repetitive occurrences.
> 
> Other than this, the patch looks good to me,
> Reviewed-by: Hao A Wu <hao.a...@intel.com>
> 
> Best Regards,
> Hao Wu
> 
> 
> >
> > Cc: Dandan Bi <dandan...@intel.com>
> > Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
> > Cc: Eric Dong <eric.d...@intel.com>
> > Cc: Laszlo Ersek <ler...@redhat.com>
> > Cc: Liming Gao <liming....@intel.com>
> > Cc: Michael D Kinney <michael.d.kin...@intel.com>
> > Cc: Ray Ni <ray...@intel.com>
> > Cc: Jian J Wang <jian.j.w...@intel.com>
> > Cc: Hao A Wu <hao.a...@intel.com>
> > Cc: Jiewen Yao <jiewen....@intel.com>
> > Signed-off-by: Michael Kubacki <michael.a.kuba...@intel.com>
> > ---
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h |  82
> > +++++--
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c        | 258
> > ++++++++++++++------
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c   |  15 +-
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c | 146
> > +++++++----
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c     |   5 +-
> >  5 files changed, 339 insertions(+), 167 deletions(-)
> >
> > diff --git
> > a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > index 1777ce0e69..92a729d140 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > @@ -49,53 +49,65 @@ GetVariableStoreStatus (
> >  /**
> >    This code gets the size of variable header.
> >
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> > +
> >    @return Size of variable header in bytes in type UINTN.
> >
> >  **/
> >  UINTN
> >  GetVariableHeaderSize (
> > -  VOID
> > +  IN  BOOLEAN   AuthFormat
> >    );
> >
> >  /**
> >
> >    This code gets the size of name of variable.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in]  Variable      Pointer to the variable header.
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> >
> >    @return UINTN          Size of variable in bytes.
> >
> >  **/
> >  UINTN
> >  NameSizeOfVariable (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    );
> >
> >  /**
> >    This code sets the size of name of variable.
> >
> > -  @param[in] Variable   Pointer to the Variable Header.
> > -  @param[in] NameSize   Name size to set.
> > +  @param[in]  Variable      Pointer to the Variable Header.
> > +  @param[in]  NameSize      Name size to set.
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> >
> >  **/
> >  VOID
> >  SetNameSizeOfVariable (
> >    IN VARIABLE_HEADER    *Variable,
> > -  IN UINTN              NameSize
> > +  IN UINTN              NameSize,
> > +  IN BOOLEAN            AuthFormat
> >    );
> >
> >  /**
> >
> >    This code gets the size of variable data.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in]  Variable      Pointer to the Variable Header.
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> >
> >    @return Size of variable in bytes.
> >
> >  **/
> >  UINTN
> >  DataSizeOfVariable (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    );
> >
> >  /**
> > @@ -103,80 +115,98 @@ DataSizeOfVariable (
> >
> >    @param[in] Variable   Pointer to the Variable Header.
> >    @param[in] DataSize   Data size to set.
> > +  @param[in] AuthFormat TRUE indicates authenticated variables are
> used.
> > +                        FALSE indicates authenticated variables are not 
> > used.
> >
> >  **/
> >  VOID
> >  SetDataSizeOfVariable (
> > -  IN VARIABLE_HEADER    *Variable,
> > -  IN UINTN              DataSize
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  UINTN             DataSize,
> > +  IN  BOOLEAN           AuthFormat
> >    );
> >
> >  /**
> >
> >    This code gets the pointer to the variable name.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Pointer to Variable Name which is Unicode encoding.
> >
> >  **/
> >  CHAR16 *
> >  GetVariableNamePtr (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    );
> >
> >  /**
> >    This code gets the pointer to the variable guid.
> >
> > -  @param Variable   Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return A EFI_GUID* pointer to Vendor Guid.
> >
> >  **/
> >  EFI_GUID *
> >  GetVendorGuidPtr (
> > -  IN VARIABLE_HEADER    *Variable
> > +  IN  VARIABLE_HEADER    *Variable,
> > +  IN  BOOLEAN            AuthFormat
> >    );
> >
> >  /**
> >
> >    This code gets the pointer to the variable data.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Pointer to Variable Data.
> >
> >  **/
> >  UINT8 *
> >  GetVariableDataPtr (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER    *Variable,
> > +  IN  BOOLEAN            AuthFormat
> >    );
> >
> >  /**
> >    This code gets the variable data offset related to variable header.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Variable Data offset.
> >
> >  **/
> >  UINTN
> >  GetVariableDataOffset (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    );
> >
> >  /**
> >
> >    This code gets the pointer to the next variable header.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Pointer to next variable header.
> >
> >  **/
> >  VARIABLE_HEADER *
> >  GetNextVariablePtr (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    );
> >
> >  /**
> > @@ -235,6 +265,8 @@ VariableCompareTimeStampInternal (
> >    @param[in]       IgnoreRtCheck       Ignore
> EFI_VARIABLE_RUNTIME_ACCESS
> > attribute
> >                                         check at runtime when searching 
> > variable.
> >    @param[in, out]  PtrTrack            Variable Track Pointer structure 
> > that
> > contains Variable Information.
> > +  @param[in]       AuthFormat          TRUE indicates authenticated 
> > variables
> are
> > used.
> > +                                       FALSE indicates authenticated 
> > variables are not used.
> >
> >    @retval          EFI_SUCCESS         Variable found successfully
> >    @retval          EFI_NOT_FOUND       Variable not found
> > @@ -244,7 +276,8 @@ FindVariableEx (
> >    IN     CHAR16                  *VariableName,
> >    IN     EFI_GUID                *VendorGuid,
> >    IN     BOOLEAN                 IgnoreRtCheck,
> > -  IN OUT VARIABLE_POINTER_TRACK  *PtrTrack
> > +  IN OUT VARIABLE_POINTER_TRACK  *PtrTrack,
> > +  IN     BOOLEAN                 AuthFormat
> >    );
> >
> >  /**
> > @@ -258,10 +291,12 @@ FindVariableEx (
> >    @param[in]  VariableStoreList A list of variable stores that should be 
> > used
> > to get the next variable.
> >                                  The maximum number of entries is the max 
> > value of
> > VARIABLE_STORE_TYPE.
> >    @param[out] VariablePtr       Pointer to variable header address.
> > +  @param[in]  AuthFormat        TRUE indicates authenticated variables are
> > used.
> > +                                FALSE indicates authenticated variables 
> > are not used.
> >
> >    @retval EFI_SUCCESS           The function completed successfully.
> >    @retval EFI_NOT_FOUND         The next variable was not found.
> > -  @retval EFI_INVALID_PARAMETER If VariableName is nt an empty string,
> > while VendorGuid is NULL.
> > +  @retval EFI_INVALID_PARAMETER If VariableName is not an empty
> string,
> > while VendorGuid is NULL.
> >    @retval EFI_INVALID_PARAMETER The input values of VariableName and
> > VendorGuid are not a name and
> >                                  GUID of an existing variable.
> >
> > @@ -272,7 +307,8 @@ VariableServiceGetNextVariableInternal (
> >    IN  CHAR16                *VariableName,
> >    IN  EFI_GUID              *VendorGuid,
> >    IN  VARIABLE_STORE_HEADER **VariableStoreList,
> > -  OUT VARIABLE_HEADER       **VariablePtr
> > +  OUT VARIABLE_HEADER       **VariablePtr,
> > +  IN  BOOLEAN               AuthFormat
> >    );
> >
> >  /**
> > diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > index 5cc12c2ae0..2e32905dfe 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > @@ -311,7 +311,7 @@ RecordVarErrorFlag (
> >               FALSE
> >               );
> >    if (!EFI_ERROR (Status)) {
> > -    VarErrFlag = (VAR_ERROR_FLAG *) GetVariableDataPtr
> (Variable.CurrPtr);
> > +    VarErrFlag = (VAR_ERROR_FLAG *) GetVariableDataPtr
> (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> >      TempFlag = *VarErrFlag;
> >      TempFlag &= Flag;
> >      if (TempFlag == *VarErrFlag) {
> > @@ -369,7 +369,7 @@ InitializeVarErrorFlag (
> >               FALSE
> >               );
> >    if (!EFI_ERROR (Status)) {
> > -    VarErrFlag = *((VAR_ERROR_FLAG *) GetVariableDataPtr
> > (Variable.CurrPtr));
> > +    VarErrFlag = *((VAR_ERROR_FLAG *) GetVariableDataPtr
> > (Variable.CurrPtr, mVariableModuleGlobal->VariableGlobal.AuthFormat));
> >      if (VarErrFlag == Flag) {
> >        return;
> >      }
> > @@ -410,7 +410,11 @@ IsUserVariable (
> >    // then no need to check if the variable is user variable or not 
> > specially.
> >    //
> >    if (mEndOfDxe && (mVariableModuleGlobal-
> > >CommonMaxUserVariableSpace != mVariableModuleGlobal-
> > >CommonVariableSpace)) {
> > -    if (VarCheckLibVariablePropertyGet (GetVariableNamePtr (Variable),
> > GetVendorGuidPtr (Variable), &Property) == EFI_NOT_FOUND) {
> > +    if (VarCheckLibVariablePropertyGet (
> > +          GetVariableNamePtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat),
> > +          GetVendorGuidPtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat),
> > +          &Property
> > +          ) == EFI_NOT_FOUND) {
> >        return TRUE;
> >      }
> >    }
> > @@ -439,10 +443,14 @@ CalculateCommonUserVariableTotalSize (
> >    if (mEndOfDxe && (mVariableModuleGlobal-
> > >CommonMaxUserVariableSpace != mVariableModuleGlobal-
> > >CommonVariableSpace)) {
> >      Variable = GetStartPointer (mNvVariableCache);
> >      while (IsValidVariableHeader (Variable, GetEndPointer
> > (mNvVariableCache))) {
> > -      NextVariable = GetNextVariablePtr (Variable);
> > +      NextVariable = GetNextVariablePtr (Variable,
> mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >        VariableSize = (UINTN) NextVariable - (UINTN) Variable;
> >        if ((Variable->Attributes &
> > EFI_VARIABLE_HARDWARE_ERROR_RECORD) !=
> > EFI_VARIABLE_HARDWARE_ERROR_RECORD) {
> > -        if (VarCheckLibVariablePropertyGet (GetVariableNamePtr (Variable),
> > GetVendorGuidPtr (Variable), &Property) == EFI_NOT_FOUND) {
> > +        if (VarCheckLibVariablePropertyGet (
> > +              GetVariableNamePtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat),
> > +              GetVendorGuidPtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat),
> > +              &Property
> > +              ) == EFI_NOT_FOUND) {
> >            //
> >            // No property, it is user variable.
> >            //
> > @@ -518,7 +526,9 @@ Reclaim (
> >    UINTN                 HwErrVariableTotalSize;
> >    VARIABLE_HEADER       *UpdatingVariable;
> >    VARIABLE_HEADER       *UpdatingInDeletedTransition;
> > +  BOOLEAN               AuthFormat;
> >
> > +  AuthFormat = mVariableModuleGlobal->VariableGlobal.AuthFormat;
> >    UpdatingVariable = NULL;
> >    UpdatingInDeletedTransition = NULL;
> >    if (UpdatingPtrTrack != NULL) {
> > @@ -540,7 +550,7 @@ Reclaim (
> >      MaximumBufferSize = sizeof (VARIABLE_STORE_HEADER);
> >
> >      while (IsValidVariableHeader (Variable, GetEndPointer
> > (VariableStoreHeader))) {
> > -      NextVariable = GetNextVariablePtr (Variable);
> > +      NextVariable = GetNextVariablePtr (Variable, AuthFormat);
> >        if ((Variable->State == VAR_ADDED || Variable->State ==
> > (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) &&
> >            Variable != UpdatingVariable &&
> >            Variable != UpdatingInDeletedTransition
> > @@ -590,7 +600,7 @@ Reclaim (
> >    //
> >    Variable = GetStartPointer (VariableStoreHeader);
> >    while (IsValidVariableHeader (Variable, GetEndPointer
> > (VariableStoreHeader))) {
> > -    NextVariable = GetNextVariablePtr (Variable);
> > +    NextVariable = GetNextVariablePtr (Variable, AuthFormat);
> >      if (Variable != UpdatingVariable && Variable->State == VAR_ADDED) {
> >        VariableSize = (UINTN) NextVariable - (UINTN) Variable;
> >        CopyMem (CurrPtr, (UINT8 *) Variable, VariableSize);
> > @@ -612,7 +622,7 @@ Reclaim (
> >    //
> >    Variable = GetStartPointer (VariableStoreHeader);
> >    while (IsValidVariableHeader (Variable, GetEndPointer
> > (VariableStoreHeader))) {
> > -    NextVariable = GetNextVariablePtr (Variable);
> > +    NextVariable = GetNextVariablePtr (Variable, AuthFormat);
> >      if (Variable != UpdatingVariable && Variable !=
> > UpdatingInDeletedTransition && Variable->State ==
> > (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) {
> >
> >        //
> > @@ -624,13 +634,14 @@ Reclaim (
> >        FoundAdded = FALSE;
> >        AddedVariable = GetStartPointer ((VARIABLE_STORE_HEADER *)
> > ValidBuffer);
> >        while (IsValidVariableHeader (AddedVariable, GetEndPointer
> > ((VARIABLE_STORE_HEADER *) ValidBuffer))) {
> > -        NextAddedVariable = GetNextVariablePtr (AddedVariable);
> > -        NameSize = NameSizeOfVariable (AddedVariable);
> > -        if (CompareGuid (GetVendorGuidPtr (AddedVariable),
> > GetVendorGuidPtr (Variable)) &&
> > -            NameSize == NameSizeOfVariable (Variable)
> > -           ) {
> > -          Point0 = (VOID *) GetVariableNamePtr (AddedVariable);
> > -          Point1 = (VOID *) GetVariableNamePtr (Variable);
> > +        NextAddedVariable = GetNextVariablePtr (AddedVariable,
> > AuthFormat);
> > +        NameSize = NameSizeOfVariable (AddedVariable, AuthFormat);
> > +        if (CompareGuid (
> > +              GetVendorGuidPtr (AddedVariable, AuthFormat),
> > +              GetVendorGuidPtr (Variable, AuthFormat)
> > +            ) && NameSize == NameSizeOfVariable (Variable, AuthFormat)) {
> > +          Point0 = (VOID *) GetVariableNamePtr (AddedVariable,
> AuthFormat);
> > +          Point1 = (VOID *) GetVariableNamePtr (Variable, AuthFormat);
> >            if (CompareMem (Point0, Point1, NameSize) == 0) {
> >              FoundAdded = TRUE;
> >              break;
> > @@ -735,7 +746,7 @@ Reclaim (
> >        mVariableModuleGlobal->CommonUserVariableTotalSize = 0;
> >        Variable = GetStartPointer ((VARIABLE_STORE_HEADER
> > *)(UINTN)VariableBase);
> >        while (IsValidVariableHeader (Variable, GetEndPointer
> > ((VARIABLE_STORE_HEADER *)(UINTN)VariableBase))) {
> > -        NextVariable = GetNextVariablePtr (Variable);
> > +        NextVariable = GetNextVariablePtr (Variable, AuthFormat);
> >          VariableSize = (UINTN) NextVariable - (UINTN) Variable;
> >          if ((Variable->Attributes &
> EFI_VARIABLE_HARDWARE_ERROR_RECORD)
> > == EFI_VARIABLE_HARDWARE_ERROR_RECORD) {
> >            mVariableModuleGlobal->HwErrVariableTotalSize += VariableSize;
> > @@ -829,7 +840,13 @@ FindVariable (
> >      PtrTrack->EndPtr   = GetEndPointer   (VariableStoreHeader[Type]);
> >      PtrTrack->Volatile = (BOOLEAN) (Type == VariableStoreTypeVolatile);
> >
> > -    Status = FindVariableEx (VariableName, VendorGuid, IgnoreRtCheck,
> > PtrTrack);
> > +    Status =  FindVariableEx (
> > +                VariableName,
> > +                VendorGuid,
> > +                IgnoreRtCheck,
> > +                PtrTrack,
> > +                mVariableModuleGlobal->VariableGlobal.AuthFormat
> > +                );
> >      if (!EFI_ERROR (Status)) {
> >        return Status;
> >      }
> > @@ -1199,7 +1216,11 @@ CheckRemainingSpaceForConsistencyInternal (
> >      VarNameSize += GET_PAD_SIZE (VarNameSize);
> >      VarDataSize  = VariableEntry->VariableSize;
> >      VarDataSize += GET_PAD_SIZE (VarDataSize);
> > -    VariableEntry->VariableSize = HEADER_ALIGN (GetVariableHeaderSize ()
> +
> > VarNameSize + VarDataSize);
> > +    VariableEntry->VariableSize = HEADER_ALIGN (
> > +                                    GetVariableHeaderSize (
> > +                                      
> > mVariableModuleGlobal->VariableGlobal.AuthFormat
> > +                                      ) + VarNameSize + VarDataSize
> > +                                    );
> >
> >      TotalNeededSize += VariableEntry->VariableSize;
> >      VariableEntry = VA_ARG (Args, VARIABLE_ENTRY_CONSISTENCY *);
> > @@ -1232,13 +1253,14 @@ CheckRemainingSpaceForConsistencyInternal (
> >                 VariableEntry->Name,
> >                 VariableEntry->Guid,
> >                 FALSE,
> > -               &VariablePtrTrack
> > +               &VariablePtrTrack,
> > +               mVariableModuleGlobal->VariableGlobal.AuthFormat
> >                 );
> >      if (!EFI_ERROR (Status)) {
> >        //
> >        // Get size of Variable[Index].
> >        //
> > -      NextVariable = GetNextVariablePtr (VariablePtrTrack.CurrPtr);
> > +      NextVariable = GetNextVariablePtr (VariablePtrTrack.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> >        OriginalVarSize = (UINTN) NextVariable - (UINTN)
> > VariablePtrTrack.CurrPtr;
> >        //
> >        // Add the original size of Variable[Index] to remaining variable 
> > storage
> > size.
> > @@ -1410,8 +1432,8 @@ AutoUpdateLangVariable (
> >        // Update Lang
> >        //
> >        VariableName = EFI_PLATFORM_LANG_VARIABLE_NAME;
> > -      Data         = GetVariableDataPtr (Variable.CurrPtr);
> > -      DataSize     = DataSizeOfVariable (Variable.CurrPtr);
> > +      Data         = GetVariableDataPtr (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> > +      DataSize     = DataSizeOfVariable (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> >      } else {
> >        Status = FindVariable (EFI_LANG_VARIABLE_NAME,
> > &gEfiGlobalVariableGuid, &Variable, &mVariableModuleGlobal-
> > >VariableGlobal, FALSE);
> >        if (!EFI_ERROR (Status)) {
> > @@ -1419,8 +1441,8 @@ AutoUpdateLangVariable (
> >          // Update PlatformLang
> >          //
> >          VariableName = EFI_LANG_VARIABLE_NAME;
> > -        Data         = GetVariableDataPtr (Variable.CurrPtr);
> > -        DataSize     = DataSizeOfVariable (Variable.CurrPtr);
> > +        Data         = GetVariableDataPtr (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> > +        DataSize     = DataSizeOfVariable (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> >        } else {
> >          //
> >          // Neither PlatformLang nor Lang is set, directly return
> > @@ -1598,6 +1620,7 @@ UpdateVariable (
> >    BOOLEAN                             IsCommonVariable;
> >    BOOLEAN                             IsCommonUserVariable;
> >    AUTHENTICATED_VARIABLE_HEADER       *AuthVariable;
> > +  BOOLEAN                             AuthFormat;
> >
> >    if (mVariableModuleGlobal->FvbInstance == NULL
> > && !mVariableModuleGlobal->VariableGlobal.EmuNvMode) {
> >      //
> > @@ -1619,6 +1642,8 @@ UpdateVariable (
> >      }
> >    }
> >
> > +  AuthFormat = mVariableModuleGlobal->VariableGlobal.AuthFormat;
> > +
> >    //
> >    // Check if CacheVariable points to the variable in variable HOB.
> >    // If yes, let CacheVariable points to the variable in NV variable cache.
> > @@ -1630,7 +1655,7 @@ UpdateVariable (
> >      CacheVariable->StartPtr = GetStartPointer (mNvVariableCache);
> >      CacheVariable->EndPtr   = GetEndPointer   (mNvVariableCache);
> >      CacheVariable->Volatile = FALSE;
> > -    Status = FindVariableEx (VariableName, VendorGuid, FALSE,
> > CacheVariable);
> > +    Status = FindVariableEx (VariableName, VendorGuid, FALSE,
> > CacheVariable, AuthFormat);
> >      if (CacheVariable->CurrPtr == NULL || EFI_ERROR (Status)) {
> >        //
> >        // There is no matched variable in NV variable cache.
> > @@ -1770,8 +1795,8 @@ UpdateVariable (
> >      // If the variable is marked valid, and the same data has been passed 
> > in,
> >      // then return to the caller immediately.
> >      //
> > -    if (DataSizeOfVariable (CacheVariable->CurrPtr) == DataSize &&
> > -        (CompareMem (Data, GetVariableDataPtr (CacheVariable->CurrPtr),
> > DataSize) == 0) &&
> > +    if (DataSizeOfVariable (CacheVariable->CurrPtr, AuthFormat) ==
> DataSize
> > &&
> > +        (CompareMem (Data, GetVariableDataPtr (CacheVariable->CurrPtr,
> > AuthFormat), DataSize) == 0) &&
> >          ((Attributes & EFI_VARIABLE_APPEND_WRITE) == 0) &&
> >          (TimeStamp == NULL)) {
> >        //
> > @@ -1791,9 +1816,13 @@ UpdateVariable (
> >          // NOTE: From 0 to DataOffset of NextVariable is reserved for 
> > Variable
> > Header and Name.
> >          // From DataOffset of NextVariable is to save the existing variable
> data.
> >          //
> > -        DataOffset = GetVariableDataOffset (CacheVariable->CurrPtr);
> > +        DataOffset = GetVariableDataOffset (CacheVariable->CurrPtr,
> > AuthFormat);
> >          BufferForMerge = (UINT8 *) ((UINTN) NextVariable + DataOffset);
> > -        CopyMem (BufferForMerge, (UINT8 *) ((UINTN) CacheVariable-
> > >CurrPtr + DataOffset), DataSizeOfVariable (CacheVariable->CurrPtr));
> > +        CopyMem (
> > +          BufferForMerge,
> > +          (UINT8 *) ((UINTN) CacheVariable->CurrPtr + DataOffset),
> > +          DataSizeOfVariable (CacheVariable->CurrPtr, AuthFormat)
> > +          );
> >
> >          //
> >          // Set Max Auth/Non-Volatile/Volatile Variable Data Size as default
> > MaxDataSize.
> > @@ -1814,15 +1843,22 @@ UpdateVariable (
> >            MaxDataSize = PcdGet32 (PcdMaxHardwareErrorVariableSize) -
> > DataOffset;
> >          }
> >
> > -        if (DataSizeOfVariable (CacheVariable->CurrPtr) + DataSize >
> > MaxDataSize) {
> > +        if (DataSizeOfVariable (CacheVariable->CurrPtr, AuthFormat) +
> > DataSize > MaxDataSize) {
> >            //
> >            // Existing data size + new data size exceed maximum variable 
> > size
> > limitation.
> >            //
> >            Status = EFI_INVALID_PARAMETER;
> >            goto Done;
> >          }
> > -        CopyMem ((UINT8*) ((UINTN) BufferForMerge + DataSizeOfVariable
> > (CacheVariable->CurrPtr)), Data, DataSize);
> > -        MergedBufSize = DataSizeOfVariable (CacheVariable->CurrPtr) +
> > DataSize;
> > +        CopyMem (
> > +          (UINT8*) (
> > +            (UINTN) BufferForMerge + DataSizeOfVariable (CacheVariable-
> > >CurrPtr, AuthFormat)
> > +            ),
> > +          Data,
> > +          DataSize
> > +          );
> > +        MergedBufSize = DataSizeOfVariable (CacheVariable->CurrPtr,
> > AuthFormat) +
> > +                          DataSize;
> >
> >          //
> >          // BufferForMerge(from DataOffset of NextVariable) has included the
> > merged existing and new data.
> > @@ -1925,7 +1961,7 @@ UpdateVariable (
> >    //
> >    NextVariable->Attributes  = Attributes &
> (~EFI_VARIABLE_APPEND_WRITE);
> >
> > -  VarNameOffset                 = GetVariableHeaderSize ();
> > +  VarNameOffset                 = GetVariableHeaderSize (AuthFormat);
> >    VarNameSize                   = StrSize (VariableName);
> >    CopyMem (
> >      (UINT8 *) ((UINTN) NextVariable + VarNameOffset),
> > @@ -1946,14 +1982,18 @@ UpdateVariable (
> >        );
> >    }
> >
> > -  CopyMem (GetVendorGuidPtr (NextVariable), VendorGuid, sizeof
> > (EFI_GUID));
> > +  CopyMem (
> > +    GetVendorGuidPtr (NextVariable, AuthFormat),
> > +    VendorGuid,
> > +    sizeof (EFI_GUID)
> > +    );
> >    //
> >    // There will be pad bytes after Data, the NextVariable->NameSize and
> >    // NextVariable->DataSize should not include pad size so that variable
> >    // service can get actual size in GetVariable.
> >    //
> > -  SetNameSizeOfVariable (NextVariable, VarNameSize);
> > -  SetDataSizeOfVariable (NextVariable, DataSize);
> > +  SetNameSizeOfVariable (NextVariable, VarNameSize, AuthFormat);
> > +  SetDataSizeOfVariable (NextVariable, DataSize, AuthFormat);
> >
> >    //
> >    // The actual size of the variable that stores in storage should
> > @@ -2036,7 +2076,7 @@ UpdateVariable (
> >                   TRUE,
> >                   Fvb,
> >                   mVariableModuleGlobal->NonVolatileLastVariableOffset,
> > -                 (UINT32) GetVariableHeaderSize (),
> > +                 (UINT32) GetVariableHeaderSize (AuthFormat),
> >                   (UINT8 *) NextVariable
> >                   );
> >
> > @@ -2069,9 +2109,9 @@ UpdateVariable (
> >                   FALSE,
> >                   TRUE,
> >                   Fvb,
> > -                 mVariableModuleGlobal->NonVolatileLastVariableOffset +
> > GetVariableHeaderSize (),
> > -                 (UINT32) (VarSize - GetVariableHeaderSize ()),
> > -                 (UINT8 *) NextVariable + GetVariableHeaderSize ()
> > +                 mVariableModuleGlobal->NonVolatileLastVariableOffset +
> > GetVariableHeaderSize (AuthFormat),
> > +                 (UINT32) (VarSize - GetVariableHeaderSize (AuthFormat)),
> > +                 (UINT8 *) NextVariable + GetVariableHeaderSize 
> > (AuthFormat)
> >                   );
> >
> >        if (EFI_ERROR (Status)) {
> > @@ -2291,7 +2331,7 @@ VariableServiceGetVariable (
> >    //
> >    // Get data size
> >    //
> > -  VarDataSize = DataSizeOfVariable (Variable.CurrPtr);
> > +  VarDataSize = DataSizeOfVariable (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> >    ASSERT (VarDataSize != 0);
> >
> >    if (*DataSize >= VarDataSize) {
> > @@ -2300,7 +2340,7 @@ VariableServiceGetVariable (
> >        goto Done;
> >      }
> >
> > -    CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr), VarDataSize);
> > +    CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat), VarDataSize);
> >      if (Attributes != NULL) {
> >        *Attributes = Variable.CurrPtr->Attributes;
> >      }
> > @@ -2357,6 +2397,7 @@ VariableServiceGetNextVariableName (
> >    EFI_STATUS              Status;
> >    UINTN                   MaxLen;
> >    UINTN                   VarNameSize;
> > +  BOOLEAN                 AuthFormat;
> >    VARIABLE_HEADER         *VariablePtr;
> >    VARIABLE_STORE_HEADER
> *VariableStoreHeader[VariableStoreTypeMax];
> >
> > @@ -2364,6 +2405,8 @@ VariableServiceGetNextVariableName (
> >      return EFI_INVALID_PARAMETER;
> >    }
> >
> > +  AuthFormat = mVariableModuleGlobal->VariableGlobal.AuthFormat;
> > +
> >    //
> >    // Calculate the possible maximum length of name string, including the
> Null
> > terminator.
> >    //
> > @@ -2387,13 +2430,27 @@ VariableServiceGetNextVariableName (
> >    VariableStoreHeader[VariableStoreTypeHob]      =
> > (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal-
> > >VariableGlobal.HobVariableBase;
> >    VariableStoreHeader[VariableStoreTypeNv]       = mNvVariableCache;
> >
> > -  Status = VariableServiceGetNextVariableInternal (VariableName,
> > VendorGuid, VariableStoreHeader, &VariablePtr);
> > +  Status =  VariableServiceGetNextVariableInternal (
> > +              VariableName,
> > +              VendorGuid,
> > +              VariableStoreHeader,
> > +              &VariablePtr,
> > +              AuthFormat
> > +              );
> >    if (!EFI_ERROR (Status)) {
> > -    VarNameSize = NameSizeOfVariable (VariablePtr);
> > +    VarNameSize = NameSizeOfVariable (VariablePtr, AuthFormat);
> >      ASSERT (VarNameSize != 0);
> >      if (VarNameSize <= *VariableNameSize) {
> > -      CopyMem (VariableName, GetVariableNamePtr (VariablePtr),
> > VarNameSize);
> > -      CopyMem (VendorGuid, GetVendorGuidPtr (VariablePtr), sizeof
> > (EFI_GUID));
> > +      CopyMem (
> > +        VariableName,
> > +        GetVariableNamePtr (VariablePtr, AuthFormat),
> > +        VarNameSize
> > +        );
> > +      CopyMem (
> > +        VendorGuid,
> > +        GetVendorGuidPtr (VariablePtr, AuthFormat),
> > +        sizeof (EFI_GUID)
> > +        );
> >        Status = EFI_SUCCESS;
> >      } else {
> >        Status = EFI_BUFFER_TOO_SMALL;
> > @@ -2446,6 +2503,9 @@ VariableServiceSetVariable (
> >    VARIABLE_HEADER                     *NextVariable;
> >    EFI_PHYSICAL_ADDRESS                Point;
> >    UINTN                               PayloadSize;
> > +  BOOLEAN                             AuthFormat;
> > +
> > +  AuthFormat = mVariableModuleGlobal->VariableGlobal.AuthFormat;
> >
> >    //
> >    // Check input parameters.
> > @@ -2544,7 +2604,8 @@ VariableServiceSetVariable (
> >    //  bytes for HwErrRec#### variable.
> >    //
> >    if ((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) ==
> > EFI_VARIABLE_HARDWARE_ERROR_RECORD) {
> > -    if (StrSize (VariableName) + PayloadSize > PcdGet32
> > (PcdMaxHardwareErrorVariableSize) - GetVariableHeaderSize ()) {
> > +    if (StrSize (VariableName) + PayloadSize >
> > +        PcdGet32 (PcdMaxHardwareErrorVariableSize) -
> GetVariableHeaderSize
> > (AuthFormat)) {
> >        return EFI_INVALID_PARAMETER;
> >      }
> >    } else {
> > @@ -2553,7 +2614,9 @@ VariableServiceSetVariable (
> >      //  the DataSize is limited to maximum size of
> > Max(Auth|Volatile)VariableSize bytes.
> >      //
> >      if ((Attributes & VARIABLE_ATTRIBUTE_AT_AW) != 0) {
> > -      if (StrSize (VariableName) + PayloadSize > mVariableModuleGlobal-
> > >MaxAuthVariableSize - GetVariableHeaderSize ()) {
> > +      if (StrSize (VariableName) + PayloadSize >
> > +          mVariableModuleGlobal->MaxAuthVariableSize -
> > +          GetVariableHeaderSize (AuthFormat)) {
> >          DEBUG ((DEBUG_ERROR,
> >            "%a: Failed to set variable '%s' with Guid %g\n",
> >            __FUNCTION__, VariableName, VendorGuid));
> > @@ -2562,12 +2625,13 @@ VariableServiceSetVariable (
> >            "MaxAuthVariableSize(0x%x) - HeaderSize(0x%x)\n",
> >            StrSize (VariableName), PayloadSize,
> >            mVariableModuleGlobal->MaxAuthVariableSize,
> > -          GetVariableHeaderSize ()
> > +          GetVariableHeaderSize (AuthFormat)
> >            ));
> >          return EFI_INVALID_PARAMETER;
> >        }
> >      } else if ((Attributes & EFI_VARIABLE_NON_VOLATILE) != 0) {
> > -      if (StrSize (VariableName) + PayloadSize > mVariableModuleGlobal-
> > >MaxVariableSize - GetVariableHeaderSize ()) {
> > +      if (StrSize (VariableName) + PayloadSize >
> > +          mVariableModuleGlobal->MaxVariableSize - GetVariableHeaderSize
> > (AuthFormat)) {
> >          DEBUG ((DEBUG_ERROR,
> >            "%a: Failed to set variable '%s' with Guid %g\n",
> >            __FUNCTION__, VariableName, VendorGuid));
> > @@ -2576,12 +2640,13 @@ VariableServiceSetVariable (
> >            "MaxVariableSize(0x%x) - HeaderSize(0x%x)\n",
> >            StrSize (VariableName), PayloadSize,
> >            mVariableModuleGlobal->MaxVariableSize,
> > -          GetVariableHeaderSize ()
> > +          GetVariableHeaderSize (AuthFormat)
> >            ));
> >          return EFI_INVALID_PARAMETER;
> >        }
> >      } else {
> > -      if (StrSize (VariableName) + PayloadSize > mVariableModuleGlobal-
> > >MaxVolatileVariableSize - GetVariableHeaderSize ()) {
> > +      if (StrSize (VariableName) + PayloadSize >
> > +          mVariableModuleGlobal->MaxVolatileVariableSize -
> > GetVariableHeaderSize (AuthFormat)) {
> >          DEBUG ((DEBUG_ERROR,
> >            "%a: Failed to set variable '%s' with Guid %g\n",
> >            __FUNCTION__, VariableName, VendorGuid));
> > @@ -2590,7 +2655,7 @@ VariableServiceSetVariable (
> >            "MaxVolatileVariableSize(0x%x) - HeaderSize(0x%x)\n",
> >            StrSize (VariableName), PayloadSize,
> >            mVariableModuleGlobal->MaxVolatileVariableSize,
> > -          GetVariableHeaderSize ()
> > +          GetVariableHeaderSize (AuthFormat)
> >            ));
> >          return EFI_INVALID_PARAMETER;
> >        }
> > @@ -2629,7 +2694,7 @@ VariableServiceSetVariable (
> >      //
> >      NextVariable  = GetStartPointer ((VARIABLE_STORE_HEADER *) (UINTN)
> > Point);
> >      while (IsValidVariableHeader (NextVariable, GetEndPointer
> > ((VARIABLE_STORE_HEADER *) (UINTN) Point))) {
> > -      NextVariable = GetNextVariablePtr (NextVariable);
> > +      NextVariable = GetNextVariablePtr (NextVariable, AuthFormat);
> >      }
> >      mVariableModuleGlobal->NonVolatileLastVariableOffset = (UINTN)
> > NextVariable - (UINTN) Point;
> >    }
> > @@ -2754,7 +2819,8 @@ VariableServiceQueryVariableInfoInternal (
> >    //
> >    if ((Attributes & (EFI_VARIABLE_NON_VOLATILE |
> > EFI_VARIABLE_HARDWARE_ERROR_RECORD)) ==
> > (EFI_VARIABLE_NON_VOLATILE |
> > EFI_VARIABLE_HARDWARE_ERROR_RECORD)) {
> >      *MaximumVariableStorageSize = PcdGet32 (PcdHwErrStorageSize);
> > -    *MaximumVariableSize = PcdGet32
> (PcdMaxHardwareErrorVariableSize) -
> > GetVariableHeaderSize ();
> > +    *MaximumVariableSize =  PcdGet32
> (PcdMaxHardwareErrorVariableSize)
> > -
> > +                              GetVariableHeaderSize (mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >    } else {
> >      if ((Attributes & EFI_VARIABLE_NON_VOLATILE) != 0) {
> >        if (AtRuntime ()) {
> > @@ -2768,11 +2834,14 @@ VariableServiceQueryVariableInfoInternal (
> >      // Let *MaximumVariableSize be Max(Auth|Volatile)VariableSize with
> the
> > exception of the variable header size.
> >      //
> >      if ((Attributes & VARIABLE_ATTRIBUTE_AT_AW) != 0) {
> > -      *MaximumVariableSize = mVariableModuleGlobal-
> > >MaxAuthVariableSize - GetVariableHeaderSize ();
> > +      *MaximumVariableSize =  mVariableModuleGlobal-
> > >MaxAuthVariableSize -
> > +                                GetVariableHeaderSize 
> > (mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >      } else if ((Attributes & EFI_VARIABLE_NON_VOLATILE) != 0) {
> > -      *MaximumVariableSize = mVariableModuleGlobal->MaxVariableSize -
> > GetVariableHeaderSize ();
> > +      *MaximumVariableSize =  mVariableModuleGlobal->MaxVariableSize -
> > +                                GetVariableHeaderSize 
> > (mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >      } else {
> > -      *MaximumVariableSize = mVariableModuleGlobal-
> > >MaxVolatileVariableSize - GetVariableHeaderSize ();
> > +      *MaximumVariableSize =   mVariableModuleGlobal-
> > >MaxVolatileVariableSize -
> > +                                GetVariableHeaderSize 
> > (mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >      }
> >    }
> >
> > @@ -2785,7 +2854,7 @@ VariableServiceQueryVariableInfoInternal (
> >    // Now walk through the related variable store.
> >    //
> >    while (IsValidVariableHeader (Variable, GetEndPointer
> > (VariableStoreHeader))) {
> > -    NextVariable = GetNextVariablePtr (Variable);
> > +    NextVariable = GetNextVariablePtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >      VariableSize = (UINT64) (UINTN) NextVariable - (UINT64) (UINTN)
> Variable;
> >
> >      if (AtRuntime ()) {
> > @@ -2820,10 +2889,11 @@ VariableServiceQueryVariableInfoInternal (
> >          VariablePtrTrack.StartPtr = GetStartPointer (VariableStoreHeader);
> >          VariablePtrTrack.EndPtr   = GetEndPointer   (VariableStoreHeader);
> >          Status = FindVariableEx (
> > -                   GetVariableNamePtr (Variable),
> > -                   GetVendorGuidPtr (Variable),
> > +                   GetVariableNamePtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat),
> > +                   GetVendorGuidPtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat),
> >                     FALSE,
> > -                   &VariablePtrTrack
> > +                   &VariablePtrTrack,
> > +                   mVariableModuleGlobal->VariableGlobal.AuthFormat
> >                     );
> >          if (!EFI_ERROR (Status) && VariablePtrTrack.CurrPtr->State !=
> > VAR_ADDED) {
> >            if ((Variable->Attributes &
> EFI_VARIABLE_HARDWARE_ERROR_RECORD)
> > == EFI_VARIABLE_HARDWARE_ERROR_RECORD) {
> > @@ -2851,10 +2921,13 @@ VariableServiceQueryVariableInfoInternal (
> >      }
> >    }
> >
> > -  if (*RemainingVariableStorageSize < GetVariableHeaderSize ()) {
> > +  if (*RemainingVariableStorageSize < GetVariableHeaderSize
> > (mVariableModuleGlobal->VariableGlobal.AuthFormat)) {
> >      *MaximumVariableSize = 0;
> > -  } else if ((*RemainingVariableStorageSize - GetVariableHeaderSize ()) <
> > *MaximumVariableSize) {
> > -    *MaximumVariableSize = *RemainingVariableStorageSize -
> > GetVariableHeaderSize ();
> > +  } else if ((*RemainingVariableStorageSize - GetVariableHeaderSize
> > (mVariableModuleGlobal->VariableGlobal.AuthFormat)) <
> > +              *MaximumVariableSize
> > +              ) {
> > +    *MaximumVariableSize = *RemainingVariableStorageSize -
> > +                             GetVariableHeaderSize (mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >    }
> >
> >    return EFI_SUCCESS;
> > @@ -3331,7 +3404,7 @@ InitNonVolatileVariableStore (
> >    //
> >    Variable  = GetStartPointer (mNvVariableCache);
> >    while (IsValidVariableHeader (Variable, GetEndPointer
> > (mNvVariableCache))) {
> > -    NextVariable = GetNextVariablePtr (Variable);
> > +    NextVariable = GetNextVariablePtr (Variable, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >      VariableSize = (UINTN) NextVariable - (UINTN) Variable;
> >      if ((Variable->Attributes & (EFI_VARIABLE_NON_VOLATILE |
> > EFI_VARIABLE_HARDWARE_ERROR_RECORD)) ==
> > (EFI_VARIABLE_NON_VOLATILE |
> > EFI_VARIABLE_HARDWARE_ERROR_RECORD)) {
> >        mVariableModuleGlobal->HwErrVariableTotalSize += VariableSize;
> > @@ -3365,8 +3438,10 @@ FlushHobVariableToFlash (
> >    VOID                          *VariableData;
> >    VARIABLE_POINTER_TRACK        VariablePtrTrack;
> >    BOOLEAN                       ErrorFlag;
> > +  BOOLEAN                       AuthFormat;
> >
> >    ErrorFlag = FALSE;
> > +  AuthFormat = mVariableModuleGlobal->VariableGlobal.AuthFormat;
> >
> >    //
> >    // Flush the HOB variable to flash.
> > @@ -3379,7 +3454,7 @@ FlushHobVariableToFlash (
> >      mVariableModuleGlobal->VariableGlobal.HobVariableBase = 0;
> >      for ( Variable = GetStartPointer (VariableStoreHeader)
> >          ; IsValidVariableHeader (Variable, GetEndPointer
> (VariableStoreHeader))
> > -        ; Variable = GetNextVariablePtr (Variable)
> > +        ; Variable = GetNextVariablePtr (Variable, AuthFormat)
> >          ) {
> >        if (Variable->State != VAR_ADDED) {
> >          //
> > @@ -3389,22 +3464,33 @@ FlushHobVariableToFlash (
> >        }
> >        ASSERT ((Variable->Attributes & EFI_VARIABLE_NON_VOLATILE) != 0);
> >        if (VendorGuid == NULL || VariableName == NULL ||
> > -          !CompareGuid (VendorGuid, GetVendorGuidPtr (Variable)) ||
> > -          StrCmp (VariableName, GetVariableNamePtr (Variable)) != 0) {
> > -        VariableData = GetVariableDataPtr (Variable);
> > -        FindVariable (GetVariableNamePtr (Variable), GetVendorGuidPtr
> > (Variable), &VariablePtrTrack, &mVariableModuleGlobal->VariableGlobal,
> > FALSE);
> > +          !CompareGuid (VendorGuid, GetVendorGuidPtr (Variable,
> > AuthFormat)) ||
> > +          StrCmp (VariableName, GetVariableNamePtr (Variable,
> > AuthFormat)) != 0) {
> > +        VariableData = GetVariableDataPtr (Variable, AuthFormat);
> > +        FindVariable (
> > +          GetVariableNamePtr (Variable, AuthFormat),
> > +          GetVendorGuidPtr (Variable, AuthFormat),
> > +          &VariablePtrTrack,
> > +          &mVariableModuleGlobal->VariableGlobal, FALSE
> > +          );
> >          Status = UpdateVariable (
> > -                   GetVariableNamePtr (Variable),
> > -                   GetVendorGuidPtr (Variable),
> > +                   GetVariableNamePtr (Variable, AuthFormat),
> > +                   GetVendorGuidPtr (Variable, AuthFormat),
> >                     VariableData,
> > -                   DataSizeOfVariable (Variable),
> > +                   DataSizeOfVariable (Variable, AuthFormat),
> >                     Variable->Attributes,
> >                     0,
> >                     0,
> >                     &VariablePtrTrack,
> >                     NULL
> >                   );
> > -        DEBUG ((EFI_D_INFO, "Variable driver flush the HOB variable to
> > flash: %g %s %r\n", GetVendorGuidPtr (Variable), GetVariableNamePtr
> > (Variable), Status));
> > +        DEBUG ((
> > +          DEBUG_INFO,
> > +          "Variable driver flush the HOB variable to flash: %g %s %r\n",
> > +          GetVendorGuidPtr (Variable, AuthFormat),
> > +          GetVariableNamePtr (Variable, AuthFormat),
> > +          Status
> > +          ));
> >        } else {
> >          //
> >          // The updated or deleted variable is matched with this HOB 
> > variable.
> > @@ -3418,7 +3504,12 @@ FlushHobVariableToFlash (
> >          // If set variable successful, or the updated or deleted variable 
> > is
> > matched with the HOB variable,
> >          // set the HOB variable to DELETED state in local.
> >          //
> > -        DEBUG ((EFI_D_INFO, "Variable driver set the HOB variable to
> DELETED
> > state in local: %g %s\n", GetVendorGuidPtr (Variable),
> GetVariableNamePtr
> > (Variable)));
> > +        DEBUG ((
> > +          DEBUG_INFO,
> > +          "Variable driver set the HOB variable to DELETED state in
> > local: %g %s\n",
> > +          GetVendorGuidPtr (Variable, AuthFormat),
> > +          GetVariableNamePtr (Variable, AuthFormat)
> > +          ));
> >          Variable->State &= VAR_DELETED;
> >        } else {
> >          ErrorFlag = TRUE;
> > @@ -3495,7 +3586,8 @@ VariableWriteServiceInitialize (
> >      // Authenticated variable initialize.
> >      //
> >      mAuthContextIn.StructSize = sizeof (AUTH_VAR_LIB_CONTEXT_IN);
> > -    mAuthContextIn.MaxAuthVariableSize = mVariableModuleGlobal-
> > >MaxAuthVariableSize - GetVariableHeaderSize ();
> > +    mAuthContextIn.MaxAuthVariableSize =  mVariableModuleGlobal-
> > >MaxAuthVariableSize -
> > +                                            GetVariableHeaderSize 
> > (mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >      Status = AuthVariableLibInitialize (&mAuthContextIn,
> > &mAuthContextOut);
> >      if (!EFI_ERROR (Status)) {
> >        DEBUG ((EFI_D_INFO, "Variable driver will work with auth variable
> > support!\n"));
> > @@ -3574,7 +3666,7 @@ ConvertNormalVarStorageToAuthVarStorage (
> >        AuthVarStroageSize += StartPtr->NameSize + GET_PAD_SIZE (StartPtr-
> > >NameSize);
> >        AuthVarStroageSize += StartPtr->DataSize + GET_PAD_SIZE (StartPtr-
> > >DataSize);
> >      }
> > -    StartPtr  = GetNextVariablePtr (StartPtr);
> > +    StartPtr  = GetNextVariablePtr (StartPtr, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >    }
> >
> >    //
> > @@ -3608,18 +3700,22 @@ ConvertNormalVarStorageToAuthVarStorage (
> >        // Copy Variable Name
> >        //
> >        NextPtr = (UINT8 *) (AuthStartPtr + 1);
> > -      CopyMem (NextPtr, GetVariableNamePtr (StartPtr), AuthStartPtr-
> > >NameSize);
> > +      CopyMem (
> > +        NextPtr,
> > +        GetVariableNamePtr (StartPtr, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat),
> > +        AuthStartPtr->NameSize
> > +        );
> >        //
> >        // Copy Variable Data
> >        //
> >        NextPtr = NextPtr + AuthStartPtr->NameSize + GET_PAD_SIZE
> > (AuthStartPtr->NameSize);
> > -      CopyMem (NextPtr, GetVariableDataPtr (StartPtr), AuthStartPtr-
> > >DataSize);
> > +      CopyMem (NextPtr, GetVariableDataPtr (StartPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat), AuthStartPtr-
> > >DataSize);
> >        //
> >        // Go to next variable
> >        //
> >        AuthStartPtr = (AUTHENTICATED_VARIABLE_HEADER *) (NextPtr +
> > AuthStartPtr->DataSize + GET_PAD_SIZE (AuthStartPtr->DataSize));
> >      }
> > -    StartPtr = GetNextVariablePtr (StartPtr);
> > +    StartPtr = GetNextVariablePtr (StartPtr, mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >    }
> >    //
> >    // Update Auth Storage Header
> > diff --git
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > index c787ddba5b..e865a089d1 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > @@ -56,8 +56,8 @@ VariableExLibFindVariable (
> >      return Status;
> >    }
> >
> > -  AuthVariableInfo->DataSize        = DataSizeOfVariable 
> > (Variable.CurrPtr);
> > -  AuthVariableInfo->Data            = GetVariableDataPtr 
> > (Variable.CurrPtr);
> > +  AuthVariableInfo->DataSize        = DataSizeOfVariable (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> > +  AuthVariableInfo->Data            = GetVariableDataPtr (Variable.CurrPtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> >    AuthVariableInfo->Attributes      = Variable.CurrPtr->Attributes;
> >    if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> >      AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *)
> Variable.CurrPtr;
> > @@ -108,7 +108,8 @@ VariableExLibFindNextVariable (
> >               VariableName,
> >               VendorGuid,
> >               VariableStoreHeader,
> > -             &VariablePtr
> > +             &VariablePtr,
> > +             mVariableModuleGlobal->VariableGlobal.AuthFormat
> >               );
> >    if (EFI_ERROR (Status)) {
> >      AuthVariableInfo->VariableName = NULL;
> > @@ -122,10 +123,10 @@ VariableExLibFindNextVariable (
> >      return Status;
> >    }
> >
> > -  AuthVariableInfo->VariableName    = GetVariableNamePtr (VariablePtr);
> > -  AuthVariableInfo->VendorGuid      = GetVendorGuidPtr (VariablePtr);
> > -  AuthVariableInfo->DataSize        = DataSizeOfVariable (VariablePtr);
> > -  AuthVariableInfo->Data            = GetVariableDataPtr (VariablePtr);
> > +  AuthVariableInfo->VariableName    = GetVariableNamePtr (VariablePtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> > +  AuthVariableInfo->VendorGuid      = GetVendorGuidPtr (VariablePtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> > +  AuthVariableInfo->DataSize        = DataSizeOfVariable (VariablePtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> > +  AuthVariableInfo->Data            = GetVariableDataPtr (VariablePtr,
> > mVariableModuleGlobal->VariableGlobal.AuthFormat);
> >    AuthVariableInfo->Attributes      = VariablePtr->Attributes;
> >    if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> >      AuthVariablePtr = (AUTHENTICATED_VARIABLE_HEADER *) VariablePtr;
> > diff --git
> > a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > index 870c9e3742..d458f1c608 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > @@ -78,17 +78,20 @@ GetVariableStoreStatus (
> >  /**
> >    This code gets the size of variable header.
> >
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> > +
> >    @return Size of variable header in bytes in type UINTN.
> >
> >  **/
> >  UINTN
> >  GetVariableHeaderSize (
> > -  VOID
> > +  IN  BOOLEAN   AuthFormat
> >    )
> >  {
> >    UINTN Value;
> >
> > -  if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> > +  if (AuthFormat) {
> >      Value = sizeof (AUTHENTICATED_VARIABLE_HEADER);
> >    } else {
> >      Value = sizeof (VARIABLE_HEADER);
> > @@ -101,20 +104,23 @@ GetVariableHeaderSize (
> >
> >    This code gets the size of name of variable.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in]  Variable      Pointer to the variable header.
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> >
> >    @return UINTN          Size of variable in bytes.
> >
> >  **/
> >  UINTN
> >  NameSizeOfVariable (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    )
> >  {
> >    AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
> >
> >    AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;
> > -  if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> > +  if (AuthFormat) {
> >      if (AuthVariable->State == (UINT8) (-1) ||
> >         AuthVariable->DataSize == (UINT32) (-1) ||
> >         AuthVariable->NameSize == (UINT32) (-1) ||
> > @@ -136,20 +142,23 @@ NameSizeOfVariable (
> >  /**
> >    This code sets the size of name of variable.
> >
> > -  @param[in] Variable   Pointer to the Variable Header.
> > -  @param[in] NameSize   Name size to set.
> > +  @param[in]  Variable      Pointer to the Variable Header.
> > +  @param[in]  NameSize      Name size to set.
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> >
> >  **/
> >  VOID
> >  SetNameSizeOfVariable (
> >    IN VARIABLE_HEADER    *Variable,
> > -  IN UINTN              NameSize
> > +  IN UINTN              NameSize,
> > +  IN BOOLEAN            AuthFormat
> >    )
> >  {
> >    AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
> >
> >    AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;
> > -  if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> > +  if (AuthFormat) {
> >      AuthVariable->NameSize = (UINT32) NameSize;
> >    } else {
> >      Variable->NameSize = (UINT32) NameSize;
> > @@ -160,20 +169,23 @@ SetNameSizeOfVariable (
> >
> >    This code gets the size of variable data.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in]  Variable      Pointer to the Variable Header.
> > +  @param[in]  AuthFormat    TRUE indicates authenticated variables are
> used.
> > +                            FALSE indicates authenticated variables are 
> > not used.
> >
> >    @return Size of variable in bytes.
> >
> >  **/
> >  UINTN
> >  DataSizeOfVariable (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    )
> >  {
> >    AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
> >
> >    AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;
> > -  if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> > +  if (AuthFormat) {
> >      if (AuthVariable->State == (UINT8) (-1) ||
> >         AuthVariable->DataSize == (UINT32) (-1) ||
> >         AuthVariable->NameSize == (UINT32) (-1) ||
> > @@ -197,18 +209,21 @@ DataSizeOfVariable (
> >
> >    @param[in] Variable   Pointer to the Variable Header.
> >    @param[in] DataSize   Data size to set.
> > +  @param[in] AuthFormat TRUE indicates authenticated variables are
> used.
> > +                        FALSE indicates authenticated variables are not 
> > used.
> >
> >  **/
> >  VOID
> >  SetDataSizeOfVariable (
> > -  IN VARIABLE_HEADER    *Variable,
> > -  IN UINTN              DataSize
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  UINTN             DataSize,
> > +  IN  BOOLEAN           AuthFormat
> >    )
> >  {
> >    AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
> >
> >    AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;
> > -  if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> > +  if (AuthFormat) {
> >      AuthVariable->DataSize = (UINT32) DataSize;
> >    } else {
> >      Variable->DataSize = (UINT32) DataSize;
> > @@ -219,36 +234,42 @@ SetDataSizeOfVariable (
> >
> >    This code gets the pointer to the variable name.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Pointer to Variable Name which is Unicode encoding.
> >
> >  **/
> >  CHAR16 *
> >  GetVariableNamePtr (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    )
> >  {
> > -  return (CHAR16 *) ((UINTN) Variable + GetVariableHeaderSize ());
> > +  return (CHAR16 *) ((UINTN) Variable + GetVariableHeaderSize
> > (AuthFormat));
> >  }
> >
> >  /**
> >    This code gets the pointer to the variable guid.
> >
> > -  @param Variable   Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return A EFI_GUID* pointer to Vendor Guid.
> >
> >  **/
> >  EFI_GUID *
> >  GetVendorGuidPtr (
> > -  IN VARIABLE_HEADER    *Variable
> > +  IN  VARIABLE_HEADER    *Variable,
> > +  IN  BOOLEAN            AuthFormat
> >    )
> >  {
> >    AUTHENTICATED_VARIABLE_HEADER *AuthVariable;
> >
> >    AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;
> > -  if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {
> > +  if (AuthFormat) {
> >      return &AuthVariable->VendorGuid;
> >    } else {
> >      return &Variable->VendorGuid;
> > @@ -259,14 +280,17 @@ GetVendorGuidPtr (
> >
> >    This code gets the pointer to the variable data.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Pointer to Variable Data.
> >
> >  **/
> >  UINT8 *
> >  GetVariableDataPtr (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER    *Variable,
> > +  IN  BOOLEAN            AuthFormat
> >    )
> >  {
> >    UINTN Value;
> > @@ -274,9 +298,9 @@ GetVariableDataPtr (
> >    //
> >    // Be careful about pad size for alignment.
> >    //
> > -  Value =  (UINTN) GetVariableNamePtr (Variable);
> > -  Value += NameSizeOfVariable (Variable);
> > -  Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));
> > +  Value =  (UINTN) GetVariableNamePtr (Variable, AuthFormat);
> > +  Value += NameSizeOfVariable (Variable, AuthFormat);
> > +  Value += GET_PAD_SIZE (NameSizeOfVariable (Variable, AuthFormat));
> >
> >    return (UINT8 *) Value;
> >  }
> > @@ -284,14 +308,17 @@ GetVariableDataPtr (
> >  /**
> >    This code gets the variable data offset related to variable header.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Variable Data offset.
> >
> >  **/
> >  UINTN
> >  GetVariableDataOffset (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    )
> >  {
> >    UINTN Value;
> > @@ -299,9 +326,9 @@ GetVariableDataOffset (
> >    //
> >    // Be careful about pad size for alignment
> >    //
> > -  Value = GetVariableHeaderSize ();
> > -  Value += NameSizeOfVariable (Variable);
> > -  Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));
> > +  Value = GetVariableHeaderSize (AuthFormat);
> > +  Value += NameSizeOfVariable (Variable, AuthFormat);
> > +  Value += GET_PAD_SIZE (NameSizeOfVariable (Variable, AuthFormat));
> >
> >    return Value;
> >  }
> > @@ -310,21 +337,24 @@ GetVariableDataOffset (
> >
> >    This code gets the pointer to the next variable header.
> >
> > -  @param Variable        Pointer to the Variable Header.
> > +  @param[in] Variable     Pointer to the Variable Header.
> > +  @param[in] AuthFormat   TRUE indicates authenticated variables are
> used.
> > +                          FALSE indicates authenticated variables are not 
> > used.
> >
> >    @return Pointer to next variable header.
> >
> >  **/
> >  VARIABLE_HEADER *
> >  GetNextVariablePtr (
> > -  IN  VARIABLE_HEADER   *Variable
> > +  IN  VARIABLE_HEADER   *Variable,
> > +  IN  BOOLEAN           AuthFormat
> >    )
> >  {
> >    UINTN Value;
> >
> > -  Value =  (UINTN) GetVariableDataPtr (Variable);
> > -  Value += DataSizeOfVariable (Variable);
> > -  Value += GET_PAD_SIZE (DataSizeOfVariable (Variable));
> > +  Value =  (UINTN) GetVariableDataPtr (Variable, AuthFormat);
> > +  Value += DataSizeOfVariable (Variable, AuthFormat);
> > +  Value += GET_PAD_SIZE (DataSizeOfVariable (Variable, AuthFormat));
> >
> >    //
> >    // Be careful about pad size for alignment.
> > @@ -415,6 +445,8 @@ VariableCompareTimeStampInternal (
> >    @param[in]       IgnoreRtCheck       Ignore
> EFI_VARIABLE_RUNTIME_ACCESS
> > attribute
> >                                         check at runtime when searching 
> > variable.
> >    @param[in, out]  PtrTrack            Variable Track Pointer structure 
> > that
> > contains Variable Information.
> > +  @param[in]       AuthFormat          TRUE indicates authenticated 
> > variables
> are
> > used.
> > +                                       FALSE indicates authenticated 
> > variables are not used.
> >
> >    @retval          EFI_SUCCESS         Variable found successfully
> >    @retval          EFI_NOT_FOUND       Variable not found
> > @@ -424,7 +456,8 @@ FindVariableEx (
> >    IN     CHAR16                  *VariableName,
> >    IN     EFI_GUID                *VendorGuid,
> >    IN     BOOLEAN                 IgnoreRtCheck,
> > -  IN OUT VARIABLE_POINTER_TRACK  *PtrTrack
> > +  IN OUT VARIABLE_POINTER_TRACK  *PtrTrack,
> > +  IN     BOOLEAN                 AuthFormat
> >    )
> >  {
> >    VARIABLE_HEADER                *InDeletedVariable;
> > @@ -439,7 +472,7 @@ FindVariableEx (
> >
> >    for ( PtrTrack->CurrPtr = PtrTrack->StartPtr
> >        ; IsValidVariableHeader (PtrTrack->CurrPtr, PtrTrack->EndPtr)
> > -      ; PtrTrack->CurrPtr = GetNextVariablePtr (PtrTrack->CurrPtr)
> > +      ; PtrTrack->CurrPtr = GetNextVariablePtr (PtrTrack->CurrPtr,
> > AuthFormat)
> >        ) {
> >      if (PtrTrack->CurrPtr->State == VAR_ADDED ||
> >          PtrTrack->CurrPtr->State == (VAR_IN_DELETED_TRANSITION &
> > VAR_ADDED)
> > @@ -453,11 +486,11 @@ FindVariableEx (
> >              return EFI_SUCCESS;
> >            }
> >          } else {
> > -          if (CompareGuid (VendorGuid, GetVendorGuidPtr (PtrTrack-
> >CurrPtr)))
> > {
> > -            Point = (VOID *) GetVariableNamePtr (PtrTrack->CurrPtr);
> > +          if (CompareGuid (VendorGuid, GetVendorGuidPtr (PtrTrack-
> >CurrPtr,
> > AuthFormat))) {
> > +            Point = (VOID *) GetVariableNamePtr (PtrTrack->CurrPtr,
> > AuthFormat);
> >
> > -            ASSERT (NameSizeOfVariable (PtrTrack->CurrPtr) != 0);
> > -            if (CompareMem (VariableName, Point, NameSizeOfVariable
> > (PtrTrack->CurrPtr)) == 0) {
> > +            ASSERT (NameSizeOfVariable (PtrTrack->CurrPtr, AuthFormat) != 
> > 0);
> > +            if (CompareMem (VariableName, Point, NameSizeOfVariable
> > (PtrTrack->CurrPtr, AuthFormat)) == 0) {
> >                if (PtrTrack->CurrPtr->State == (VAR_IN_DELETED_TRANSITION &
> > VAR_ADDED)) {
> >                  InDeletedVariable     = PtrTrack->CurrPtr;
> >                } else {
> > @@ -486,6 +519,8 @@ FindVariableEx (
> >    @param[in]  VariableStoreList A list of variable stores that should be 
> > used
> > to get the next variable.
> >                                  The maximum number of entries is the max 
> > value of
> > VARIABLE_STORE_TYPE.
> >    @param[out] VariablePtr       Pointer to variable header address.
> > +  @param[in]  AuthFormat        TRUE indicates authenticated variables are
> > used.
> > +                                FALSE indicates authenticated variables 
> > are not used.
> >
> >    @retval EFI_SUCCESS           The function completed successfully.
> >    @retval EFI_NOT_FOUND         The next variable was not found.
> > @@ -500,7 +535,8 @@ VariableServiceGetNextVariableInternal (
> >    IN  CHAR16                *VariableName,
> >    IN  EFI_GUID              *VendorGuid,
> >    IN  VARIABLE_STORE_HEADER **VariableStoreList,
> > -  OUT VARIABLE_HEADER       **VariablePtr
> > +  OUT VARIABLE_HEADER       **VariablePtr,
> > +  IN  BOOLEAN               AuthFormat
> >    )
> >  {
> >    EFI_STATUS              Status;
> > @@ -525,7 +561,7 @@ VariableServiceGetNextVariableInternal (
> >      Variable.EndPtr   = GetEndPointer   (VariableStoreList[StoreType]);
> >      Variable.Volatile = (BOOLEAN) (StoreType ==
> VariableStoreTypeVolatile);
> >
> > -    Status = FindVariableEx (VariableName, VendorGuid, FALSE, &Variable);
> > +    Status = FindVariableEx (VariableName, VendorGuid, FALSE, &Variable,
> > AuthFormat);
> >      if (!EFI_ERROR (Status)) {
> >        break;
> >      }
> > @@ -552,7 +588,7 @@ VariableServiceGetNextVariableInternal (
> >      //
> >      // If variable name is not empty, get next variable.
> >      //
> > -    Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);
> > +    Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr, AuthFormat);
> >    }
> >
> >    while (TRUE) {
> > @@ -605,13 +641,14 @@ VariableServiceGetNextVariableInternal (
> >            VariablePtrTrack.StartPtr = Variable.StartPtr;
> >            VariablePtrTrack.EndPtr = Variable.EndPtr;
> >            Status = FindVariableEx (
> > -                     GetVariableNamePtr (Variable.CurrPtr),
> > -                     GetVendorGuidPtr (Variable.CurrPtr),
> > +                     GetVariableNamePtr (Variable.CurrPtr, AuthFormat),
> > +                     GetVendorGuidPtr (Variable.CurrPtr, AuthFormat),
> >                       FALSE,
> > -                     &VariablePtrTrack
> > +                     &VariablePtrTrack,
> > +                     AuthFormat
> >                       );
> >            if (!EFI_ERROR (Status) && VariablePtrTrack.CurrPtr->State ==
> > VAR_ADDED) {
> > -            Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);
> > +            Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr,
> AuthFormat);
> >              continue;
> >            }
> >          }
> > @@ -625,13 +662,14 @@ VariableServiceGetNextVariableInternal (
> >            VariableInHob.StartPtr = GetStartPointer
> > (VariableStoreList[VariableStoreTypeHob]);
> >            VariableInHob.EndPtr   = GetEndPointer
> > (VariableStoreList[VariableStoreTypeHob]);
> >            Status = FindVariableEx (
> > -                     GetVariableNamePtr (Variable.CurrPtr),
> > -                     GetVendorGuidPtr (Variable.CurrPtr),
> > +                     GetVariableNamePtr (Variable.CurrPtr, AuthFormat),
> > +                     GetVendorGuidPtr (Variable.CurrPtr, AuthFormat),
> >                       FALSE,
> > -                     &VariableInHob
> > +                     &VariableInHob,
> > +                     AuthFormat
> >                       );
> >            if (!EFI_ERROR (Status)) {
> > -            Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);
> > +            Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr,
> AuthFormat);
> >              continue;
> >            }
> >          }
> > @@ -642,7 +680,7 @@ VariableServiceGetNextVariableInternal (
> >        }
> >      }
> >
> > -    Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);
> > +    Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr, AuthFormat);
> >    }
> >
> >  Done:
> > diff --git
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> > index ce409f22a3..5e24bc4a62 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> > @@ -975,8 +975,9 @@ MmVariableServiceInitialize (
> >                      );
> >    ASSERT_EFI_ERROR (Status);
> >
> > -  mVariableBufferPayloadSize = GetMaxVariableSize () +
> > -                               OFFSET_OF
> > (SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY,
> > Name) - GetVariableHeaderSize ();
> > +  mVariableBufferPayloadSize =  GetMaxVariableSize () +
> > +                                  OFFSET_OF
> > (SMM_VARIABLE_COMMUNICATE_VAR_CHECK_VARIABLE_PROPERTY,
> > Name) -
> > +                                  GetVariableHeaderSize 
> > (mVariableModuleGlobal-
> > >VariableGlobal.AuthFormat);
> >
> >    Status = gMmst->MmAllocatePool (
> >                      EfiRuntimeServicesData,
> > --
> > 2.16.2.windows.1
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#49132): https://edk2.groups.io/g/devel/message/49132
Mute This Topic: https://groups.io/mt/34540092/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to