]>
git.proxmox.com Git - libtpms.git/blob - src/tpm12/tpm_memory.c
1 /********************************************************************************/
3 /* TPM Memory Allocation */
4 /* Written by Ken Goldman */
5 /* IBM Thomas J. Watson Research Center */
6 /* $Id: tpm_memory.c 4609 2011-08-26 19:27:38Z kgoldman $ */
8 /* (c) Copyright IBM Corporation 2006, 2010. */
10 /* All rights reserved. */
12 /* Redistribution and use in source and binary forms, with or without */
13 /* modification, are permitted provided that the following conditions are */
16 /* Redistributions of source code must retain the above copyright notice, */
17 /* this list of conditions and the following disclaimer. */
19 /* Redistributions in binary form must reproduce the above copyright */
20 /* notice, this list of conditions and the following disclaimer in the */
21 /* documentation and/or other materials provided with the distribution. */
23 /* Neither the names of the IBM Corporation nor the names of its */
24 /* contributors may be used to endorse or promote products derived from */
25 /* this software without specific prior written permission. */
27 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
28 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
29 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */
30 /* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
31 /* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
32 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
33 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */
34 /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */
35 /* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
36 /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */
37 /* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
38 /********************************************************************************/
43 #include "tpm_constants.h"
44 #include "tpm_debug.h"
45 #include "tpm_error.h"
47 #include "tpm_memory.h"
49 /* TPM_Malloc() is a general purpose wrapper around malloc()
52 TPM_RESULT
TPM_Malloc(unsigned char **buffer
, uint32_t size
)
56 /* assertion test. The coding style requires that all allocated pointers are initialized to
57 NULL. A non-NULL value indicates either a missing initialization or a pointer reuse (a
60 if (*buffer
!= NULL
) {
61 printf("TPM_Malloc: Error (fatal), *buffer %p should be NULL before malloc\n", *buffer
);
65 /* verify that the size is not "too large" */
67 if (size
> TPM_ALLOC_MAX
) {
68 printf("TPM_Malloc: Error, size %u greater than maximum allowed\n", size
);
72 /* verify that the size is not 0, this would be implementation defined and should never occur */
75 printf("TPM_Malloc: Error (fatal), size is zero\n");
80 *buffer
= malloc(size
);
81 if (*buffer
== NULL
) {
82 printf("TPM_Malloc: Error allocating %u bytes\n", size
);
89 /* TPM_Realloc() is a general purpose wrapper around realloc()
92 TPM_RESULT
TPM_Realloc(unsigned char **buffer
,
96 unsigned char *tmpptr
= NULL
;
98 /* verify that the size is not "too large" */
100 if (size
> TPM_ALLOC_MAX
) {
101 printf("TPM_Realloc: Error, size %u greater than maximum allowed\n", size
);
106 tmpptr
= realloc(*buffer
, size
);
107 if (tmpptr
== NULL
) {
108 printf("TPM_Realloc: Error reallocating %u bytes\n", size
);
118 /* TPM_Free() is the companion to the TPM allocation functions. It is not used internally. The
119 intent is for use by an application that links directly to a TPM and wants to free memory
120 allocated by the TPM.
122 It avoids a potential problem if the application uses a different allocation library, perhaps one
123 that wraps the functions to detect overflows or memory leaks.
126 void TPM_Free(unsigned char *buffer
)