]>
git.proxmox.com Git - mirror_edk2.git/blob - CryptoPkg/Library/BaseCryptLib/SysCall/BaseMemAllocation.c
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 */
30 void *malloc (size_t size
)
32 CRYPTMEM_HEAD
*PoolHdr
;
37 // Adjust the size by the buffer header overhead
39 NewSize
= (UINTN
)(size
) + CRYPTMEM_OVERHEAD
;
41 Data
= AllocatePool (NewSize
);
43 PoolHdr
= (CRYPTMEM_HEAD
*)Data
;
45 // Record the memory brief information
47 PoolHdr
->Signature
= CRYPTMEM_HEAD_SIGNATURE
;
50 return (VOID
*)(PoolHdr
+ 1);
53 // The buffer allocation failed.
59 /* Reallocate memory blocks */
60 void *realloc (void *ptr
, size_t size
)
62 CRYPTMEM_HEAD
*OldPoolHdr
;
63 CRYPTMEM_HEAD
*NewPoolHdr
;
68 NewSize
= (UINTN
)size
+ CRYPTMEM_OVERHEAD
;
69 Data
= AllocatePool (NewSize
);
71 NewPoolHdr
= (CRYPTMEM_HEAD
*)Data
;
72 NewPoolHdr
->Signature
= CRYPTMEM_HEAD_SIGNATURE
;
73 NewPoolHdr
->Size
= size
;
76 // Retrieve the original size from the buffer header.
78 OldPoolHdr
= (CRYPTMEM_HEAD
*)ptr
- 1;
79 ASSERT (OldPoolHdr
->Signature
== CRYPTMEM_HEAD_SIGNATURE
);
80 OldSize
= OldPoolHdr
->Size
;
83 // Duplicate the buffer content.
85 CopyMem ((VOID
*)(NewPoolHdr
+ 1), ptr
, MIN (OldSize
, size
));
86 FreePool ((VOID
*)OldPoolHdr
);
89 return (VOID
*)(NewPoolHdr
+ 1);
92 // The buffer allocation failed.
98 /* De-allocates or frees a memory block */
101 CRYPTMEM_HEAD
*PoolHdr
;
104 // In Standard C, free() handles a null pointer argument transparently. This
105 // is not true of FreePool() below, so protect it.
108 PoolHdr
= (CRYPTMEM_HEAD
*)ptr
- 1;
109 ASSERT (PoolHdr
->Signature
== CRYPTMEM_HEAD_SIGNATURE
);