From 9a12e5825aa338f9a81fca3d451bb032fadaad33 Mon Sep 17 00:00:00 2001 From: Dong Guo Date: Thu, 27 Mar 2014 10:54:23 +0000 Subject: Calculate enough space for 2 variables (public key and variable data) instead of directly setting them 1 by 1. Fixed a bug in public key reclaim(). Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dong Guo Reviewed-by: Yao Jiewen Reviewed-by: Zeng, Star git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15404 6f19259b-4bc3-4df7-8a09-765794883524 --- .../VariableAuthenticated/RuntimeDxe/Variable.h | 30 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h') diff --git a/SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h b/SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h index b9f4f43402..c0497afe5e 100644 --- a/SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h +++ b/SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.h @@ -111,10 +111,6 @@ typedef struct { typedef struct { EFI_GUID *Guid; CHAR16 *Name; -// UINT32 Attributes; - // - // Variable size include variable header, name and data. - // UINTN VariableSize; } VARIABLE_ENTRY_CONSISTENCY; @@ -221,6 +217,32 @@ DataSizeOfVariable ( IN VARIABLE_HEADER *Variable ); +/** + This function is to check if the remaining variable space is enough to set + all Variables from argument list successfully. The purpose of the check + is to keep the consistency of the Variables to be in variable storage. + + Note: Variables are assumed to be in same storage. + The set sequence of Variables will be same with the sequence of VariableEntry from argument list, + so follow the argument sequence to check the Variables. + + @param[in] Attributes Variable attributes for Variable entries. + @param ... The variable argument list with type VARIABLE_ENTRY_CONSISTENCY *. + A NULL terminates the list. The VariableSize of + VARIABLE_ENTRY_CONSISTENCY is the variable data size as input. + It will be changed to variable total size as output. + + @retval TRUE Have enough variable space to set the Variables successfully. + @retval FALSE No enough variable space to set the Variables successfully. + +**/ +BOOLEAN +EFIAPI +CheckRemainingSpaceForConsistency ( + IN UINT32 Attributes, + ... + ); + /** Update the variable region with Variable information. If EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is set, index of associated public key is needed. -- cgit v1.2.3