From: "Wu, Hao A" <hao.a.wu@intel.com>
To: "Kubacki, Michael A" <michael.a.kubacki@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Bi, Dandan" <dandan.bi@intel.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
"Dong, Eric" <eric.dong@intel.com>,
Laszlo Ersek <lersek@redhat.com>,
"Gao, Liming" <liming.gao@intel.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
"Ni, Ray" <ray.ni@intel.com>,
"Wang, Jian J" <jian.j.wang@intel.com>,
"Yao, Jiewen" <jiewen.yao@intel.com>
Subject: Re: [PATCH V4 04/10] MdeModulePkg/Variable: Parameterize auth status in VariableParsing
Date: Thu, 17 Oct 2019 01:49:56 +0000 [thread overview]
Message-ID: <B80AF82E9BFB8E4FBD8C89DA810C6A093C94858F@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <DM6PR11MB38343A287E95DEE9EF2B716FB56D0@DM6PR11MB3834.namprd11.prod.outlook.com>
Just expecting consistency for the rule, I found that for function
VariableServiceGetNextVariableName(), there are 4 occurrences and the local
variable is introduced.
But for VariableExLibFindNextVariable(), there are 5 occurrences but no local
variable is introduced.
Best Regards,
Hao Wu
> -----Original Message-----
> From: Kubacki, Michael A
> Sent: Thursday, October 17, 2019 9:42 AM
> To: Wu, Hao A; devel@edk2.groups.io
> Cc: Bi, Dandan; Ard Biesheuvel; Dong, Eric; Laszlo Ersek; Gao, Liming; Kinney,
> Michael D; Ni, Ray; Wang, Jian J; Yao, Jiewen
> Subject: RE: [PATCH V4 04/10] MdeModulePkg/Variable: Parameterize auth
> status in VariableParsing
>
> 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.wu@intel.com>
> > Sent: Wednesday, October 16, 2019 6:01 PM
> > To: Kubacki, Michael A <michael.a.kubacki@intel.com>;
> > devel@edk2.groups.io
> > Cc: Bi, Dandan <dandan.bi@intel.com>; Ard Biesheuvel
> > <ard.biesheuvel@linaro.org>; Dong, Eric <eric.dong@intel.com>; Laszlo
> Ersek
> > <lersek@redhat.com>; Gao, Liming <liming.gao@intel.com>; Kinney,
> Michael
> > D <michael.d.kinney@intel.com>; Ni, Ray <ray.ni@intel.com>; Wang, Jian J
> > <jian.j.wang@intel.com>; Yao, Jiewen <jiewen.yao@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.wu@intel.com>
> >
> > Best Regards,
> > Hao Wu
> >
> >
> > >
> > > Cc: Dandan Bi <dandan.bi@intel.com>
> > > Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> > > Cc: Eric Dong <eric.dong@intel.com>
> > > Cc: Laszlo Ersek <lersek@redhat.com>
> > > Cc: Liming Gao <liming.gao@intel.com>
> > > Cc: Michael D Kinney <michael.d.kinney@intel.com>
> > > Cc: Ray Ni <ray.ni@intel.com>
> > > Cc: Jian J Wang <jian.j.wang@intel.com>
> > > Cc: Hao A Wu <hao.a.wu@intel.com>
> > > Cc: Jiewen Yao <jiewen.yao@intel.com>
> > > Signed-off-by: Michael Kubacki <michael.a.kubacki@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
> >
>
next prev parent reply other threads:[~2019-10-17 1:50 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-14 23:29 [PATCH V4 00/10] UEFI Variable SMI Reduction Kubacki, Michael A
2019-10-14 23:29 ` [PATCH V4 01/10] MdeModulePkg/Variable: Consolidate common parsing functions Kubacki, Michael A
2019-10-16 7:52 ` Wu, Hao A
2019-10-14 23:29 ` [PATCH V4 02/10] MdeModulePkg/Variable: Parameterize GetNextVariableInternal () stores Kubacki, Michael A
2019-10-16 7:53 ` Wu, Hao A
2019-10-14 23:29 ` [PATCH V4 03/10] MdeModulePkg/Variable: Parameterize VARIABLE_INFO_ENTRY buffer Kubacki, Michael A
2019-10-16 7:54 ` Wu, Hao A
2019-10-14 23:29 ` [PATCH V4 04/10] MdeModulePkg/Variable: Parameterize auth status in VariableParsing Kubacki, Michael A
2019-10-17 1:01 ` Wu, Hao A
2019-10-17 1:41 ` Kubacki, Michael A
2019-10-17 1:49 ` Wu, Hao A [this message]
2019-10-14 23:29 ` [PATCH V4 05/10] MdeModulePkg/Variable: Add a file for NV variable functions Kubacki, Michael A
2019-10-16 7:55 ` Wu, Hao A
2019-10-14 23:29 ` [PATCH V4 06/10] MdeModulePkg VariableInfo: Always consider RT DXE and SMM stats Kubacki, Michael A
2019-10-16 7:56 ` Wu, Hao A
2019-10-14 23:29 ` [PATCH V4 07/10] MdeModulePkg/Variable: Add RT GetVariable() cache support Kubacki, Michael A
2019-10-16 6:46 ` Wang, Jian J
[not found] ` <15CE0DB2DE3EB613.1607@groups.io>
2019-10-16 6:54 ` [edk2-devel] " Wang, Jian J
2019-10-17 1:24 ` Kubacki, Michael A
2019-10-17 1:47 ` Wang, Jian J
2019-10-16 7:56 ` Wu, Hao A
2019-10-16 16:44 ` Kubacki, Michael A
2019-10-17 14:23 ` Wang, Jian J
2019-10-17 17:44 ` Kubacki, Michael A
2019-10-14 23:29 ` [PATCH V4 08/10] MdeModulePkg/Variable: Add RT GetNextVariableName() " Kubacki, Michael A
2019-10-16 7:56 ` Wu, Hao A
2019-10-14 23:30 ` [PATCH V4 09/10] OvmfPkg: Disable variable runtime cache Kubacki, Michael A
2019-10-15 7:32 ` Laszlo Ersek
2019-10-14 23:30 ` [PATCH V4 10/10] MdeModulePkg: Enable variable runtime cache by default Kubacki, Michael A
2019-10-15 7:33 ` Laszlo Ersek
2019-10-16 7:57 ` Wu, Hao A
2019-10-15 0:49 ` [PATCH V4 00/10] UEFI Variable SMI Reduction Liming Gao
2019-10-15 16:15 ` Kubacki, Michael A
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=B80AF82E9BFB8E4FBD8C89DA810C6A093C94858F@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox