On 06/25/15 14:59, Zeng, Star wrote: > 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
Okay -- so this means that the merged variable driver does not *expect* a specific GUID in the varstore, but *detects* whatever is there, and acts correspondingly. Is that right? What happens if the GUID found matches neither of the two well-known GUIDs? > > !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 We may have two issues here: - The current library class resolutions may not be "minimal" in the OVMF DSC files, regardless of this patchset. Any such redundancy should be reduced first, probably. - Then, all of the resultant library class resolutions should be considered / updated by this patchset. Please feel free to attack the first issue as well. If you prefer, I can add that task to my queue, but it's going to take long... Thanks Laszlo > -----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