Fix few typos in comments and documentation. Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Chao Zhang <chao.b.zhang@intel.com> Signed-off-by: Antoine Coeur <coeur@gmx.fr> Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Philippe Mathieu-Daude <philmd@redhat.com> Message-Id: <20200207010831.9046-67-philmd@redhat.com>
		
			
				
	
	
		
			277 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			6.4 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);
 | 
						|
}
 | 
						|
 |