-
Notifications
You must be signed in to change notification settings - Fork 626
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Take OpenSsl 3.0.9 from acidanthera audk. Doesn't link yet.
- Loading branch information
jief666
committed
Jan 10, 2024
1 parent
dcdf3e9
commit c349ee7
Showing
25,647 changed files
with
1,561,940 additions
and
365,363 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
/** @file | ||
Base Memory Allocation Routines Wrapper for Crypto library over OpenSSL | ||
during PEI & DXE phases. | ||
Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR> | ||
SPDX-License-Identifier: BSD-2-Clause-Patent | ||
**/ | ||
|
||
#include <CrtLibSupport.h> | ||
#include <Library/MemoryAllocationLib.h> | ||
|
||
// | ||
// Extra header to record the memory buffer size from malloc routine. | ||
// | ||
#define CRYPTMEM_HEAD_SIGNATURE SIGNATURE_32('c','m','h','d') | ||
typedef struct { | ||
UINT32 Signature; | ||
UINT32 Reserved; | ||
UINTN Size; | ||
} CRYPTMEM_HEAD; | ||
|
||
#define CRYPTMEM_OVERHEAD sizeof(CRYPTMEM_HEAD) | ||
|
||
// | ||
// -- Memory-Allocation Routines -- | ||
// | ||
|
||
/* Allocates memory blocks */ | ||
void * | ||
malloc ( | ||
size_t size | ||
) | ||
{ | ||
CRYPTMEM_HEAD *PoolHdr; | ||
UINTN NewSize; | ||
VOID *Data; | ||
|
||
// | ||
// Adjust the size by the buffer header overhead | ||
// | ||
NewSize = (UINTN)(size) + CRYPTMEM_OVERHEAD; | ||
|
||
Data = AllocatePool (NewSize); | ||
if (Data != NULL) { | ||
PoolHdr = (CRYPTMEM_HEAD *)Data; | ||
// | ||
// Record the memory brief information | ||
// | ||
PoolHdr->Signature = CRYPTMEM_HEAD_SIGNATURE; | ||
PoolHdr->Size = size; | ||
|
||
return (VOID *)(PoolHdr + 1); | ||
} else { | ||
// | ||
// The buffer allocation failed. | ||
// | ||
return NULL; | ||
} | ||
} | ||
|
||
/* Reallocate memory blocks */ | ||
void * | ||
realloc ( | ||
void *ptr, | ||
size_t size | ||
) | ||
{ | ||
CRYPTMEM_HEAD *OldPoolHdr; | ||
CRYPTMEM_HEAD *NewPoolHdr; | ||
UINTN OldSize; | ||
UINTN NewSize; | ||
VOID *Data; | ||
|
||
NewSize = (UINTN)size + CRYPTMEM_OVERHEAD; | ||
Data = AllocatePool (NewSize); | ||
if (Data != NULL) { | ||
NewPoolHdr = (CRYPTMEM_HEAD *)Data; | ||
NewPoolHdr->Signature = CRYPTMEM_HEAD_SIGNATURE; | ||
NewPoolHdr->Size = size; | ||
if (ptr != NULL) { | ||
// | ||
// Retrieve the original size from the buffer header. | ||
// | ||
OldPoolHdr = (CRYPTMEM_HEAD *)ptr - 1; | ||
ASSERT (OldPoolHdr->Signature == CRYPTMEM_HEAD_SIGNATURE); | ||
OldSize = OldPoolHdr->Size; | ||
|
||
// | ||
// Duplicate the buffer content. | ||
// | ||
CopyMem ((VOID *)(NewPoolHdr + 1), ptr, MIN (OldSize, size)); | ||
FreePool ((VOID *)OldPoolHdr); | ||
} | ||
|
||
return (VOID *)(NewPoolHdr + 1); | ||
} else { | ||
// | ||
// The buffer allocation failed. | ||
// | ||
return NULL; | ||
} | ||
} | ||
|
||
/* De-allocates or frees a memory block */ | ||
void | ||
free ( | ||
void *ptr | ||
) | ||
{ | ||
CRYPTMEM_HEAD *PoolHdr; | ||
|
||
// | ||
// In Standard C, free() handles a null pointer argument transparently. This | ||
// is not true of FreePool() below, so protect it. | ||
// | ||
if (ptr != NULL) { | ||
PoolHdr = (CRYPTMEM_HEAD *)ptr - 1; | ||
ASSERT (PoolHdr->Signature == CRYPTMEM_HEAD_SIGNATURE); | ||
FreePool (PoolHdr); | ||
} | ||
} |
Oops, something went wrong.