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);
 | 
						|
}
 |