REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the SecurityPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			276 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Internal file explorer functions for SecureBoot configuration module.
 | |
| 
 | |
| Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include "SecureBootConfigImpl.h"
 | |
| 
 | |
| VOID                *mStartOpCodeHandle = NULL;
 | |
| VOID                *mEndOpCodeHandle   = NULL;
 | |
| EFI_IFR_GUID_LABEL  *mStartLabel        = NULL;
 | |
| EFI_IFR_GUID_LABEL  *mEndLabel          = NULL;
 | |
| 
 | |
| /**
 | |
|   Refresh the global UpdateData structure.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| RefreshUpdateData (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   //
 | |
|   // Free current updated date
 | |
|   //
 | |
|   if (mStartOpCodeHandle != NULL) {
 | |
|     HiiFreeOpCodeHandle (mStartOpCodeHandle);
 | |
|   }
 | |
| 
 | |
|   //
 | |
|   // Create new OpCode Handle
 | |
|   //
 | |
|   mStartOpCodeHandle = HiiAllocateOpCodeHandle ();
 | |
| 
 | |
|   //
 | |
|   // Create Hii Extend Label OpCode as the start opcode
 | |
|   //
 | |
|   mStartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode (
 | |
|                                         mStartOpCodeHandle,
 | |
|                                         &gEfiIfrTianoGuid,
 | |
|                                         NULL,
 | |
|                                         sizeof (EFI_IFR_GUID_LABEL)
 | |
|                                         );
 | |
|   mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Clean up the dynamic opcode at label and form specified by both LabelId.
 | |
| 
 | |
|   @param[in] LabelId         It is both the Form ID and Label ID for opcode deletion.
 | |
|   @param[in] PrivateData     Module private data.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| CleanUpPage (
 | |
|   IN UINT16                          LabelId,
 | |
|   IN SECUREBOOT_CONFIG_PRIVATE_DATA  *PrivateData
 | |
|   )
 | |
| {
 | |
|   RefreshUpdateData ();
 | |
| 
 | |
|   //
 | |
|   // Remove all op-codes from dynamic page
 | |
|   //
 | |
|   mStartLabel->Number = LabelId;
 | |
|   HiiUpdateForm (
 | |
|     PrivateData->HiiHandle,
 | |
|     &gSecureBootConfigFormSetGuid,
 | |
|     LabelId,
 | |
|     mStartOpCodeHandle, // Label LabelId
 | |
|     mEndOpCodeHandle    // LABEL_END
 | |
|     );
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Extract filename from device path. The returned buffer is allocated using AllocateCopyPool.
 | |
|   The caller is responsible for freeing the allocated buffer using FreePool(). If return NULL
 | |
|   means not enough memory resource.
 | |
| 
 | |
|   @param DevicePath       Device path.
 | |
| 
 | |
|   @retval NULL            Not enough memory resource for AllocateCopyPool.
 | |
|   @retval Other           A new allocated string that represents the file name.
 | |
| 
 | |
| **/
 | |
| CHAR16 *
 | |
| ExtractFileNameFromDevicePath (
 | |
|   IN   EFI_DEVICE_PATH_PROTOCOL  *DevicePath
 | |
|   )
 | |
| {
 | |
|   CHAR16  *String;
 | |
|   CHAR16  *MatchString;
 | |
|   CHAR16  *LastMatch;
 | |
|   CHAR16  *FileName;
 | |
|   UINTN   Length;
 | |
| 
 | |
|   ASSERT (DevicePath != NULL);
 | |
| 
 | |
|   String      = DevicePathToStr (DevicePath);
 | |
|   MatchString = String;
 | |
|   LastMatch   = String;
 | |
|   FileName    = NULL;
 | |
| 
 | |
|   while (MatchString != NULL) {
 | |
|     LastMatch   = MatchString + 1;
 | |
|     MatchString = StrStr (LastMatch, L"\\");
 | |
|   }
 | |
| 
 | |
|   Length   = StrLen (LastMatch);
 | |
|   FileName = AllocateCopyPool ((Length + 1) * sizeof (CHAR16), LastMatch);
 | |
|   if (FileName != NULL) {
 | |
|     *(FileName + Length) = 0;
 | |
|   }
 | |
| 
 | |
|   FreePool (String);
 | |
| 
 | |
|   return FileName;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update  the form base on the selected file.
 | |
| 
 | |
|   @param FilePath   Point to the file path.
 | |
|   @param FormId     The form need to display.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| UpdatePage (
 | |
|   IN  EFI_DEVICE_PATH_PROTOCOL  *FilePath,
 | |
|   IN  EFI_FORM_ID               FormId
 | |
|   )
 | |
| {
 | |
|   CHAR16         *FileName;
 | |
|   EFI_STRING_ID  StringToken;
 | |
| 
 | |
|   FileName = NULL;
 | |
| 
 | |
|   if (FilePath != NULL) {
 | |
|     FileName = ExtractFileNameFromDevicePath (FilePath);
 | |
|   }
 | |
| 
 | |
|   if (FileName == NULL) {
 | |
|     //
 | |
|     // FileName = NULL has two case:
 | |
|     // 1. FilePath == NULL, not select file.
 | |
|     // 2. FilePath != NULL, but ExtractFileNameFromDevicePath return NULL not enough memory resource.
 | |
|     // In these two case, no need to update the form, and exit the caller function.
 | |
|     //
 | |
|     return TRUE;
 | |
|   }
 | |
| 
 | |
|   StringToken =  HiiSetString (gSecureBootPrivateData->HiiHandle, 0, FileName, NULL);
 | |
| 
 | |
|   gSecureBootPrivateData->FileContext->FileName = FileName;
 | |
| 
 | |
|   EfiOpenFileByDevicePath (
 | |
|     &FilePath,
 | |
|     &gSecureBootPrivateData->FileContext->FHandle,
 | |
|     EFI_FILE_MODE_READ,
 | |
|     0
 | |
|     );
 | |
|   //
 | |
|   // Create Subtitle op-code for the display string of the option.
 | |
|   //
 | |
|   RefreshUpdateData ();
 | |
|   mStartLabel->Number = FormId;
 | |
| 
 | |
|   HiiCreateSubTitleOpCode (
 | |
|     mStartOpCodeHandle,
 | |
|     StringToken,
 | |
|     0,
 | |
|     0,
 | |
|     0
 | |
|     );
 | |
| 
 | |
|   HiiUpdateForm (
 | |
|     gSecureBootPrivateData->HiiHandle,
 | |
|     &gSecureBootConfigFormSetGuid,
 | |
|     FormId,
 | |
|     mStartOpCodeHandle, // Label FormId
 | |
|     mEndOpCodeHandle    // LABEL_END
 | |
|     );
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the PK form base on the input file path info.
 | |
| 
 | |
|   @param FilePath    Point to the file path.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| UpdatePKFromFile (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   )
 | |
| {
 | |
|   return UpdatePage (FilePath, FORMID_ENROLL_PK_FORM);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the KEK form base on the input file path info.
 | |
| 
 | |
|   @param FilePath    Point to the file path.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| UpdateKEKFromFile (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   )
 | |
| {
 | |
|   return UpdatePage (FilePath, FORMID_ENROLL_KEK_FORM);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the DB form base on the input file path info.
 | |
| 
 | |
|   @param FilePath    Point to the file path.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| UpdateDBFromFile (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   )
 | |
| {
 | |
|   return UpdatePage (FilePath, SECUREBOOT_ENROLL_SIGNATURE_TO_DB);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the DBX form base on the input file path info.
 | |
| 
 | |
|   @param FilePath    Point to the file path.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| UpdateDBXFromFile (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   )
 | |
| {
 | |
|   return UpdatePage (FilePath, SECUREBOOT_ENROLL_SIGNATURE_TO_DBX);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Update the DBT form base on the input file path info.
 | |
| 
 | |
|   @param FilePath    Point to the file path.
 | |
| 
 | |
|   @retval TRUE   Exit caller function.
 | |
|   @retval FALSE  Not exit caller function.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| UpdateDBTFromFile (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   )
 | |
| {
 | |
|   return UpdatePage (FilePath, SECUREBOOT_ENROLL_SIGNATURE_TO_DBT);
 | |
| }
 |