Ard & Laszlo,

Variable store header is initialized by platform dsc, the merged variable 
driver will AUTOMATICALLY compare EFI_VARIABLE_GUID/ 
EFI_AUTHENTICATED_VARIABLE_GUID against VARIABLE_STORE_HEADER.Signature to know 
the format of variable (VARIABLE_HEADER or AUTHENTICATED_VARIABLE_HEADER(In 
fact, it is VARIABLE_HEADER in AuthenticatedVariableFormat.h)). There is no 
break to SECURE_BOOT_ENABLE = FALSE case. For example in VarStore.fdf.inc

!if $(SECURE_BOOT_ENABLE) == TRUE
  # Signature: gEfiAuthenticatedVariableGuid =
  #   { 0xaaf32c78, 0x947b, 0x439a,
  #     { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 }}
  0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43,
  0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92,
!else
  # Signature: gEfiVariableGuid =
  #   { 0xddcf3616, 0x3275, 0x4164,
  #     { 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d }}
  0x16, 0x36, 0xcf, 0xdd, 0x75, 0x32, 0x64, 0x41,
  0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d,
!endif

AuthVariableLib will not to touch variable storage format(variable store header 
or variable header), but only to provide auth services that follow UEFI spec.


I had been aware DxeTpmMeasurementLib in [LibraryClasses] section. I also found 
BaseCryptLib|.../ RuntimeCryptLib.inf has been in 
[LibraryClasses.common.DXE_RUNTIME_DRIVER] section and 
OpensslLib|.../OpensslLib.inf has been in [LibraryClasses] section.
I just copied them to MdeModulePkg/.../VariableRuntimeDxe.inf from original 
SecurityPkg/.../VariableRuntimeDxe.inf, and then add TpmMeasurementLib and 
AuthVariableLib declaration.

  SecurityPkg/VariableAuthenticated/RuntimeDxe/VariableRuntimeDxe.inf {
    <LibraryClasses>
      BaseCryptLib|CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf
      OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
  }

Do you prefer the change to be like below in [LibraryClasses] section?
!if $(SECURE_BOOT_ENABLE) == TRUE
  PlatformSecureLib|OvmfPkg/Library/PlatformSecureLib/PlatformSecureLib.inf
  IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
  OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
  
TpmMeasurementLib|SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf
+  AuthVariableLib|SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf
!if $(NETWORK_IP6_ENABLE) == TRUE
  TcpIoLib|MdeModulePkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf
!endif
+!else
+  
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
+  
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
!endif



Thanks,
Star

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] 
Sent: Thursday, June 25, 2015 7:45 PM
To: Laszlo Ersek
Cc: Zeng, Star; edk2-devel@lists.sourceforge.net; Justen, Jordan L
Subject: Re: [edk2] [PATCH 00/20] Separate auth variable service from Auth 
Variable driver.

On 25 June 2015 at 13:15, Laszlo Ersek <ler...@redhat.com> wrote:
> On 06/25/15 11:46, Star Zeng wrote:
>> For your easy review,
>> the forked code is at g...@github.com:lzeng14/edk2.git branch 
>> SeparateAuthVariableService.
>>
>> What to do:
>> 1. Move TpmMeasurementLib LibraryClass from SecurityPkg to MdeModulePkg.
>> 2. Implement a NULL TpmMeasurementLib library instance in MdeModulePkg.
>> 3. Move authenticated variable definition from AuthenticatedVariableFormat.h 
>> to VariableFormat.h.
>> 4. Merge VariableInfo in SecurityPkg to VariableInfo in MdeModulePkg.
>> 5. Merge from VariablePei in SecurityPkg to VariablePei in MdeModulePkg.
>> 6. Add AuthVariableLib LibraryClass definitions in MdeModulePkg.
>> 7. Implement a NULL AuthVariableLib library instance in MdeModulePkg.
>> 8. Implement AuthVariableLib library instance in SecurityPkg.
>> 9. Merge from Auth Variable driver in SecurityPkg to Variable drive in 
>> MdeModulePkg.
>> 10. Update platform package to use the merged Variable driver.
>>
>> Why to do:
>> 1. Share code.
>> We are moving forward to separate auth variable service from Auth 
>> Variable driver in SecurityPkg to AuthVariableLib. Then the 
>> AuthVariableLib could benefit and be used by different implementation of 
>> Auth Variable drivers.
>> 2. Remove code duplication and reduce maintenance effort.
>> 2.1. After auth variable service separated from Auth Variable driver 
>> in SecurityPkg to AuthVariableLib. The remaining code logic of Auth 
>> Variable driver in SecurityPkg will be almost same with Variable 
>> driver in MdeModulePkg. We are going to merge them.
>> 2.2. The functionality of VariableInfo in SecurityPkg has covered 
>> VariableInfo in MdeModulePkg.
>> 2.3. The code logic of VariablePei in SecurityPkg is same with 
>> VariablePei in MdeModulePkg.
>> 3. TpmMeasurementLib is consumed by Auth Variable driver in 
>> SecurityPkg now, as Auth Variable driver in SecurityPkg will be 
>> merged to Variable driver in MdeModulePkg, so the library class also needs 
>> to be moved to MdeModulePkg.
>> 4. gEfiAuthenticatedVariableGuid will be used by both merged Variable 
>> driver and AuthVariableLib, AUTHENTICATED_VARIABLE_HEADER will be 
>> used by merged Variable driver.
>>
>> What test done:
>> Nt32: Boot with SECURE_BOOT_ENABLE = TRUE or FALSE, enable secure boot with 
>> SECURE_BOOT_ENABLE = TRUE.
>> OVMF: Boot with SECURE_BOOT_ENABLE = TRUE or FALSE, enable secure boot with 
>> SECURE_BOOT_ENABLE = TRUE.
>> Vlv2TbltDevice: Boot and enable secure boot with SECURE_BOOT_ENABLE = TRUE.
>>
>> What is the impact to platform:
>> 1. Only platform dsc and fdf need to be updated except the change in 
>> ArmPlatformPkg.dec and NorFlashAuthenticatedDxe.inf to remove 
>> gVariableAuthenticatedRuntimeDxeFileGuid and use gVariableRuntimeDxeFileGuid.
>
> Since Ard added secure boot support to ArmVirtPkg, I will let him 
> review patch 19/20.
>
> With regard to OVMF, I have a question, and some notes.
>
> * Question: In point 4 above, do I understand correctly that the 
> varstore is now supposed to have only one GUID, the authenticated one, 
> regardless of whether secure boot is enabled in the build or not?
>
> If that's the case, then it's problematic.
>
> First, technically, "OvmfPkg/VarStore.fdf.inc" will be broken for the 
> SECURE_BOOT_ENABLE=FALSE case, because this FDF include file will 
> build a varstore template that will be then rejected by the variable driver.
>
> Second, such an update will break all preexistent virtual machines 
> (and, well, physical machines too) that use firmware with 
> SECURE_BOOT_ENABLE=FALSE. Their current varstores contain the 
> non-authenticated GUID, and after a firmware upgrade (despite 
> *keeping* SECURE_BOOT_ENABLE=FALSE), those varstores will be rejected. 
> (If I understand right.)
>
> I think that the new, merged, variable driver should be parametrized, 
> with regard to the varstore GUID. The driver should take a fixed 
> pointer PCD, to a 16 byte array, specifying the GUID, and DSC files 
> should be able to specify that PCD, based on SECURE_BOOT_ENABLE.
>

This should probably be moved to AuthVariableLib, i.e., it should have a 
function that returns the appropriate GUID for non-authenticated resp 
authenticated variable stores.


> * Notes (for patch 16/20):
>
> Please grep OvmfPkg for all instances of SECURE_BOOT_ENABLE, and adapt 
> them all as appropriate.
>
> The patch currently adds one new conditional and removes one in each 
> DSC file, and modifies one conditional in each FDF file.
>
> That's not good enough. Beyond the VarStore.fdf.inc issue mentioned 
> above, each DSC file contains 8 "SECURE_BOOT_ENABLE" conditionals, and
> *some* of those overlap with your patch. For example, the
>
> TpmMeasurementLib|SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasu
> TpmMeasurementLib|rementLib.inf
>
> library resolution is already present elsewhere.
>
> So please investigate all current SECURE_BOOT_ENABLE conditionals 
> under OvmfPkg/, and update them / simplify them all as appropriate.
>
> Thanks
> Laszlo
------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to