]>
git.proxmox.com Git - mirror_edk2.git/blob - CryptoPkg/Library/BaseCryptLib/SysCall/BaseMemAllocation.c
b7bed15c18df66cd7f8819ea01e119c263fb8f99
2 Base Memory Allocation Routines Wrapper for Crypto library over OpenSSL
3 during PEI & DXE phases.
5 Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include <CrtLibSupport.h>
11 #include <Library/MemoryAllocationLib.h>
14 // Extra header to record the memory buffer size from malloc routine.
16 #define CRYPTMEM_HEAD_SIGNATURE SIGNATURE_32('c','m','h','d')
23 #define CRYPTMEM_OVERHEAD sizeof(CRYPTMEM_HEAD)
26 // -- Memory-Allocation Routines --
29 /* Allocates memory blocks */
35 CRYPTMEM_HEAD
*PoolHdr
;
40 // Adjust the size by the buffer header overhead
42 NewSize
= (UINTN
)(size
) + CRYPTMEM_OVERHEAD
;
44 Data
= AllocatePool (NewSize
);
46 PoolHdr
= (CRYPTMEM_HEAD
*)Data
;
48 // Record the memory brief information
50 PoolHdr
->Signature
= CRYPTMEM_HEAD_SIGNATURE
;
53 return (VOID
*)(PoolHdr
+ 1);
56 // The buffer allocation failed.
62 /* Reallocate memory blocks */
69 CRYPTMEM_HEAD
*OldPoolHdr
;
70 CRYPTMEM_HEAD
*NewPoolHdr
;
75 NewSize
= (UINTN
)size
+ CRYPTMEM_OVERHEAD
;
76 Data
= AllocatePool (NewSize
);
78 NewPoolHdr
= (CRYPTMEM_HEAD
*)Data
;
79 NewPoolHdr
->Signature
= CRYPTMEM_HEAD_SIGNATURE
;
80 NewPoolHdr
->Size
= size
;
83 // Retrieve the original size from the buffer header.
85 OldPoolHdr
= (CRYPTMEM_HEAD
*)ptr
- 1;
86 ASSERT (OldPoolHdr
->Signature
== CRYPTMEM_HEAD_SIGNATURE
);
87 OldSize
= OldPoolHdr
->Size
;
90 // Duplicate the buffer content.
92 CopyMem ((VOID
*)(NewPoolHdr
+ 1), ptr
, MIN (OldSize
, size
));
93 FreePool ((VOID
*)OldPoolHdr
);
96 return (VOID
*)(NewPoolHdr
+ 1);
99 // The buffer allocation failed.
105 /* De-allocates or frees a memory block */
111 CRYPTMEM_HEAD
*PoolHdr
;
114 // In Standard C, free() handles a null pointer argument transparently. This
115 // is not true of FreePool() below, so protect it.
118 PoolHdr
= (CRYPTMEM_HEAD
*)ptr
- 1;
119 ASSERT (PoolHdr
->Signature
== CRYPTMEM_HEAD_SIGNATURE
);