From nobody Wed May 8 23:26:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+85446+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+85446+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1641804387; cv=none; d=zohomail.com; s=zohoarc; b=W0M8i26tMjk0VWgsgpyFZxoVVUd/sx4s69SmxuFDal41gu1B3nwj5PNbihDHYGsDYtq7zv2nN32LPgzjvFnx4UHHnBE5PxFa4uFk/YgPe0EQYURJds5OZiM3xnzzH1PRQ3uWim2H639js27gmc/+ThozF6M/LlCUrAf6Nl0ga+o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641804387; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=/7f9dzqD+Dto53mtfTFAEK+N3s3jncQ34GJz23aPfUo=; b=RqQqns2WN6WvmIlw5XQfol4iH1ZD7v752O2IxDLuMX0BbXu32yDNlLTUdkaAJ+Ho9qeJqkCcI4Urnx1urqUIax1vVNvCXGX1/HamNAO9t7CNRHrfBkpLXED6RMZO87usKw4Hl0rQOKx73iwz+56m9b4S7iGOyy0C0otgUy0xtH0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+85446+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1641804387921686.872956789211; Mon, 10 Jan 2022 00:46:27 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id UkrNYY1788612xLtdU3uDbpC; Mon, 10 Jan 2022 00:46:27 -0800 X-Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web11.29513.1641804385893477000 for ; Mon, 10 Jan 2022 00:46:26 -0800 X-IronPort-AV: E=McAfee;i="6200,9189,10222"; a="240734070" X-IronPort-AV: E=Sophos;i="5.88,276,1635231600"; d="scan'208";a="240734070" X-Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jan 2022 00:46:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,276,1635231600"; d="scan'208";a="514602454" X-Received: from shbiosbuild1001.sh.intel.com ([10.239.132.191]) by orsmga007.jf.intel.com with ESMTP; 10 Jan 2022 00:46:21 -0800 From: "Long1 Huang" To: devel@edk2.groups.io Cc: Huang Long , Liming Gao , Chen Lin Z , Dandan Bi Subject: [edk2-devel] [PATCH] REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3796 Date: Mon, 10 Jan 2022 16:51:27 +0000 Message-Id: <7c0a5228fe07d13ab34ae53a1965e74ae130c762.1641833074.git.long1.huang@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,long1.huang@intel.com X-Gm-Message-State: 5BD1fyBKz3RO1EhDoMtJ3A7px1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1641804387; bh=V6K6yjNe9Wni8mSN+zdsPM0m+YsKaJcrjyIaAsoAGhI=; h=Cc:Date:From:Reply-To:Subject:To; b=cqEcHCUvE9oq/K1jM5U/V7dNCReP3X0vwcvPA0PAki7mhcYNZYxfCRP7m0yOdRHPMG/ nmHT7xvd3y7/nmxsPuMCrnEkbVB2UPij1EQEMs3zRQXaM7L3kb57hNXRhVE+mab5Fwzo2 KxzIqYizJKqLRGaHneAsWZtvdh7rbI4/X+k= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1641804389105100001 Content-Type: text/plain; charset="utf-8" MdeModulePkg/HiiDatabaseDxe: Add Support for authenticated variable Database.c: 1. Replace PcdGetExPtr with PcdGetExPtr. 2. Add FindAuthVariableData function to parse authenticated variable type = for getting a correct default value in PcdNvStoreDefaultValueBuffer. Cc: Liming Gao Cc: Chen Lin Z Cc: Dandan Bi Signed-off-by: Huang Long --- .../Universal/HiiDatabaseDxe/Database.c | 147 +++++++++++++----- .../HiiDatabaseDxe/HiiDatabaseDxe.inf | 3 + 2 files changed, 114 insertions(+), 36 deletions(-) diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c b/MdeModulePk= g/Universal/HiiDatabaseDxe/Database.c index 0b09c24d52..c055fa0f29 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c @@ -603,6 +603,45 @@ FindVariableData ( return NULL; } =20 +/** + Find the matched authenticated variable from the input variable storage. + + @param[in] VariableStorage Point to the variable storage header. + @param[in] VarGuid A unique identifier for the variable. + @param[in] VarAttribute The attributes bitmask for the variable. + @param[in] VarName A Null-terminated ascii string that is the na= me of the variable. + + @return Pointer to the matched variable header or NULL if not found. +**/ +AUTHENTICATED_VARIABLE_HEADER * +FindAuthVariableData ( + IN VARIABLE_STORE_HEADER *VariableStorage, + IN EFI_GUID *VarGuid, + IN UINT32 VarAttribute, + IN CHAR16 *VarName + ) +{ + AUTHENTICATED_VARIABLE_HEADER *AuthVariableHeader; + AUTHENTICATED_VARIABLE_HEADER *AuthVariableEnd; + + AuthVariableEnd =3D (AUTHENTICATED_VARIABLE_HEADER *)((UINT8 *)Variab= leStorage + VariableStorage->Size); + AuthVariableHeader =3D (AUTHENTICATED_VARIABLE_HEADER *)(VariableStorage= + 1); + AuthVariableHeader =3D (AUTHENTICATED_VARIABLE_HEADER *)HEADER_ALIGN (Au= thVariableHeader); + while (AuthVariableHeader < AuthVariableEnd) { + if (CompareGuid (&AuthVariableHeader->VendorGuid, VarGuid) && + (AuthVariableHeader->Attributes =3D=3D VarAttribute) && + (StrCmp (VarName, (CHAR16 *)(AuthVariableHeader + 1)) =3D=3D 0)) + { + return AuthVariableHeader; + } + + AuthVariableHeader =3D (AUTHENTICATED_VARIABLE_HEADER *)((UINT8 *)Auth= VariableHeader + sizeof (AUTHENTICATED_VARIABLE_HEADER) + AuthVariableHeade= r->NameSize + AuthVariableHeader->DataSize); + AuthVariableHeader =3D (AUTHENTICATED_VARIABLE_HEADER *)HEADER_ALIGN (= AuthVariableHeader); + } + + return NULL; +} + /** Find question default value from PcdNvStoreDefaultValueBuffer =20 @@ -626,25 +665,27 @@ FindQuestionDefaultSetting ( IN BOOLEAN BitFieldQuestion ) { - VARIABLE_HEADER *VariableHeader; - VARIABLE_STORE_HEADER *VariableStorage; - LIST_ENTRY *Link; - VARSTORAGE_DEFAULT_DATA *Entry; - VARIABLE_STORE_HEADER *NvStoreBuffer; - UINT8 *DataBuffer; - UINT8 *BufferEnd; - BOOLEAN IsFound; - UINTN Index; - UINT32 BufferValue; - UINT32 BitFieldVal; - UINTN BitOffset; - UINTN ByteOffset; - UINTN BitWidth; - UINTN StartBit; - UINTN EndBit; - PCD_DEFAULT_DATA *DataHeader; - PCD_DEFAULT_INFO *DefaultInfo; - PCD_DATA_DELTA *DeltaData; + VARIABLE_HEADER *VariableHeader; + AUTHENTICATED_VARIABLE_HEADER *AuthVariableHeader; + VARIABLE_STORE_HEADER *VariableStorage; + LIST_ENTRY *Link; + VARSTORAGE_DEFAULT_DATA *Entry; + VARIABLE_STORE_HEADER *NvStoreBuffer; + UINT8 *DataBuffer; + UINT8 *BufferEnd; + BOOLEAN AuthFormat; + BOOLEAN IsFound; + UINTN Index; + UINT32 BufferValue; + UINT32 BitFieldVal; + UINTN BitOffset; + UINTN ByteOffset; + UINTN BitWidth; + UINTN StartBit; + UINTN EndBit; + PCD_DEFAULT_DATA *DataHeader; + PCD_DEFAULT_INFO *DefaultInfo; + PCD_DATA_DELTA *DeltaData; =20 if (gSkuId =3D=3D 0xFFFFFFFFFFFFFFFF) { gSkuId =3D LibPcdGetSku (); @@ -666,7 +707,7 @@ FindQuestionDefaultSetting ( } =20 if (Link =3D=3D &gVarStorageList) { - DataBuffer =3D (UINT8 *)PcdGetPtr (PcdNvStoreDefaultValueBuff= er); + DataBuffer =3D (UINT8 *)PcdGetExPtr (&gEfiMdeModulePkgTokenSp= aceGuid, PcdNvStoreDefaultValueBuffer); gNvDefaultStoreSize =3D ((PCD_NV_STORE_DEFAULT_BUFFER_HEADER *)DataBuf= fer)->Length; // // The first section data includes NV storage default setting. @@ -750,12 +791,27 @@ FindQuestionDefaultSetting ( return EFI_NOT_FOUND; } =20 + // + // Judge if the variable type is authenticated, default is false + // + AuthFormat =3D FALSE; + if (CompareGuid (&VariableStorage->Signature, &gEfiAuthenticatedVariable= Guid)) { + AuthFormat =3D TRUE; + } + // // Find the question default value from the variable storage // - VariableHeader =3D FindVariableData (VariableStorage, &EfiVarStore->Guid= , EfiVarStore->Attributes, (CHAR16 *)EfiVarStore->Name); - if (VariableHeader =3D=3D NULL) { - return EFI_NOT_FOUND; + if(AuthFormat) { + AuthVariableHeader =3D FindAuthVariableData (VariableStorage, &EfiVarS= tore->Guid, EfiVarStore->Attributes, (CHAR16 *)EfiVarStore->Name); + if (AuthVariableHeader =3D=3D NULL) { + return EFI_NOT_FOUND; + } + } else { + VariableHeader =3D FindVariableData (VariableStorage, &EfiVarStore->Gu= id, EfiVarStore->Attributes, (CHAR16 *)EfiVarStore->Name); + if (VariableHeader =3D=3D NULL) { + return EFI_NOT_FOUND; + } } =20 StartBit =3D 0; @@ -770,20 +826,39 @@ FindQuestionDefaultSetting ( Width =3D EndBit / 8 + 1; } =20 - if (VariableHeader->DataSize < ByteOffset + Width) { - return EFI_INVALID_PARAMETER; - } + if(AuthFormat) { + if (AuthVariableHeader->DataSize < ByteOffset + Width) { + return EFI_INVALID_PARAMETER; + } =20 - // - // Copy the question value - // - if (ValueBuffer !=3D NULL) { - if (BitFieldQuestion) { - CopyMem (&BufferValue, (UINT8 *)VariableHeader + sizeof (VARIABLE_HE= ADER) + VariableHeader->NameSize + ByteOffset, Width); - BitFieldVal =3D BitFieldRead32 (BufferValue, StartBit, EndBit); - CopyMem (ValueBuffer, &BitFieldVal, Width); - } else { - CopyMem (ValueBuffer, (UINT8 *)VariableHeader + sizeof (VARIABLE_HEA= DER) + VariableHeader->NameSize + IfrQuestionHdr->VarStoreInfo.VarOffset, W= idth); + // + // Copy the question value + // + if (ValueBuffer !=3D NULL) { + if (BitFieldQuestion) { + CopyMem (&BufferValue, (UINT8 *)AuthVariableHeader + sizeof (AUTHE= NTICATED_VARIABLE_HEADER) + AuthVariableHeader->NameSize + ByteOffset, Widt= h); + BitFieldVal =3D BitFieldRead32 (BufferValue, StartBit, EndBit); + CopyMem (ValueBuffer, &BitFieldVal, Width); + } else { + CopyMem (ValueBuffer, (UINT8 *)AuthVariableHeader + sizeof (AUTHEN= TICATED_VARIABLE_HEADER) + AuthVariableHeader->NameSize + IfrQuestionHdr->V= arStoreInfo.VarOffset, Width); + } + } + } else { + if (VariableHeader->DataSize < ByteOffset + Width) { + return EFI_INVALID_PARAMETER; + } + + // + // Copy the question value + // + if (ValueBuffer !=3D NULL) { + if (BitFieldQuestion) { + CopyMem (&BufferValue, (UINT8 *)VariableHeader + sizeof (VARIABLE_= HEADER) + VariableHeader->NameSize + ByteOffset, Width); + BitFieldVal =3D BitFieldRead32 (BufferValue, StartBit, EndBit); + CopyMem (ValueBuffer, &BitFieldVal, Width); + } else { + CopyMem (ValueBuffer, (UINT8 *)VariableHeader + sizeof (VARIABLE_H= EADER) + VariableHeader->NameSize + IfrQuestionHdr->VarStoreInfo.VarOffset,= Width); + } } } =20 diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf b/Mde= ModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf index 0116fb6ecb..dac4d614a8 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf @@ -86,6 +86,9 @@ gEfiHiiImageDecoderNameJpegGuid |gEfiMdeModulePkgTokenSpaceGuid.PcdSuppo= rtHiiImageProtocol ## SOMETIMES_CONSUMES ## GUID gEfiHiiImageDecoderNamePngGuid |gEfiMdeModulePkgTokenSpaceGuid.PcdSuppo= rtHiiImageProtocol ## SOMETIMES_CONSUMES ## GUID gEdkiiIfrBitVarstoreGuid = ## SOMETIMES_CONSUMES ## GUID + gEfiAuthenticatedVariableGuid + gEfiVariableGuid + gEfiMdeModulePkgTokenSpaceGuid =20 [Depex] TRUE --=20 2.25.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#85446): https://edk2.groups.io/g/devel/message/85446 Mute This Topic: https://groups.io/mt/88319377/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-