VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigMisc.c

Last change on this file was 99404, checked in by vboxsync, 2 years ago

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1/** @file
2 Helper functions for SecureBoot configuration module.
3
4Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
5SPDX-License-Identifier: BSD-2-Clause-Patent
6
7**/
8
9#include "SecureBootConfigImpl.h"
10
11/**
12 Read file content into BufferPtr, the size of the allocate buffer
13 is *FileSize plus AdditionAllocateSize.
14
15 @param[in] FileHandle The file to be read.
16 @param[in, out] BufferPtr Pointers to the pointer of allocated buffer.
17 @param[out] FileSize Size of input file
18 @param[in] AdditionAllocateSize Addition size the buffer need to be allocated.
19 In case the buffer need to contain others besides the file content.
20
21 @retval EFI_SUCCESS The file was read into the buffer.
22 @retval EFI_INVALID_PARAMETER A parameter was invalid.
23 @retval EFI_OUT_OF_RESOURCES A memory allocation failed.
24 @retval others Unexpected error.
25
26**/
27EFI_STATUS
28ReadFileContent (
29 IN EFI_FILE_HANDLE FileHandle,
30 IN OUT VOID **BufferPtr,
31 OUT UINTN *FileSize,
32 IN UINTN AdditionAllocateSize
33 )
34
35{
36 UINTN BufferSize;
37 UINT64 SourceFileSize;
38 VOID *Buffer;
39 EFI_STATUS Status;
40
41 if ((FileHandle == NULL) || (FileSize == NULL)) {
42 return EFI_INVALID_PARAMETER;
43 }
44
45 Buffer = NULL;
46
47 //
48 // Get the file size
49 //
50 Status = FileHandle->SetPosition (FileHandle, (UINT64)-1);
51 if (EFI_ERROR (Status)) {
52 goto ON_EXIT;
53 }
54
55 Status = FileHandle->GetPosition (FileHandle, &SourceFileSize);
56 if (EFI_ERROR (Status)) {
57 goto ON_EXIT;
58 }
59
60 Status = FileHandle->SetPosition (FileHandle, 0);
61 if (EFI_ERROR (Status)) {
62 goto ON_EXIT;
63 }
64
65 BufferSize = (UINTN)SourceFileSize + AdditionAllocateSize;
66 Buffer = AllocateZeroPool (BufferSize);
67 if (Buffer == NULL) {
68 return EFI_OUT_OF_RESOURCES;
69 }
70
71 BufferSize = (UINTN)SourceFileSize;
72 *FileSize = BufferSize;
73
74 Status = FileHandle->Read (FileHandle, &BufferSize, Buffer);
75 if (EFI_ERROR (Status) || (BufferSize != *FileSize)) {
76 FreePool (Buffer);
77 Buffer = NULL;
78 Status = EFI_BAD_BUFFER_SIZE;
79 goto ON_EXIT;
80 }
81
82ON_EXIT:
83
84 *BufferPtr = Buffer;
85 return Status;
86}
87
88/**
89 Close an open file handle.
90
91 @param[in] FileHandle The file handle to close.
92
93**/
94VOID
95CloseFile (
96 IN EFI_FILE_HANDLE FileHandle
97 )
98{
99 if (FileHandle != NULL) {
100 FileHandle->Close (FileHandle);
101 }
102}
103
104/**
105 Convert a nonnegative integer to an octet string of a specified length.
106
107 @param[in] Integer Pointer to the nonnegative integer to be converted
108 @param[in] IntSizeInWords Length of integer buffer in words
109 @param[out] OctetString Converted octet string of the specified length
110 @param[in] OSSizeInBytes Intended length of resulting octet string in bytes
111
112Returns:
113
114 @retval EFI_SUCCESS Data conversion successfully
115 @retval EFI_BUFFER_TOOL_SMALL Buffer is too small for output string
116
117**/
118EFI_STATUS
119EFIAPI
120Int2OctStr (
121 IN CONST UINTN *Integer,
122 IN UINTN IntSizeInWords,
123 OUT UINT8 *OctetString,
124 IN UINTN OSSizeInBytes
125 )
126{
127 CONST UINT8 *Ptr1;
128 UINT8 *Ptr2;
129
130 for (Ptr1 = (CONST UINT8 *)Integer, Ptr2 = OctetString + OSSizeInBytes - 1;
131 Ptr1 < (UINT8 *)(Integer + IntSizeInWords) && Ptr2 >= OctetString;
132 Ptr1++, Ptr2--)
133 {
134 *Ptr2 = *Ptr1;
135 }
136
137 for ( ; Ptr1 < (CONST UINT8 *)(Integer + IntSizeInWords) && *Ptr1 == 0; Ptr1++) {
138 }
139
140 if (Ptr1 < (CONST UINT8 *)(Integer + IntSizeInWords)) {
141 return EFI_BUFFER_TOO_SMALL;
142 }
143
144 if (Ptr2 >= OctetString) {
145 ZeroMem (OctetString, Ptr2 - OctetString + 1);
146 }
147
148 return EFI_SUCCESS;
149}
150
151/**
152 Worker function that prints an EFI_GUID into specified Buffer.
153
154 @param[in] Guid Pointer to GUID to print.
155 @param[in] Buffer Buffer to print Guid into.
156 @param[in] BufferSize Size of Buffer.
157
158 @retval Number of characters printed.
159
160**/
161UINTN
162GuidToString (
163 IN EFI_GUID *Guid,
164 IN CHAR16 *Buffer,
165 IN UINTN BufferSize
166 )
167{
168 UINTN Size;
169
170 Size = UnicodeSPrint (
171 Buffer,
172 BufferSize,
173 L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
174 (UINTN)Guid->Data1,
175 (UINTN)Guid->Data2,
176 (UINTN)Guid->Data3,
177 (UINTN)Guid->Data4[0],
178 (UINTN)Guid->Data4[1],
179 (UINTN)Guid->Data4[2],
180 (UINTN)Guid->Data4[3],
181 (UINTN)Guid->Data4[4],
182 (UINTN)Guid->Data4[5],
183 (UINTN)Guid->Data4[6],
184 (UINTN)Guid->Data4[7]
185 );
186
187 //
188 // SPrint will null terminate the string. The -1 skips the null
189 //
190 return Size - 1;
191}
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette