Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: src/tspi/tsp_context_mem.c

Issue 3581012: Upgrade from trousers 0.3.3 to 0.3.6 and from testsuite 0.2 to 0.3. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/trousers.git
Patch Set: git cl push Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/tspi/tsp_auth.c ('k') | src/tspi/tsp_maint.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Licensed Materials - Property of IBM 3 * Licensed Materials - Property of IBM
4 * 4 *
5 * trousers - An open source TCG Software Stack 5 * trousers - An open source TCG Software Stack
6 * 6 *
7 * (C) Copyright International Business Machines Corp. 2004 7 * (C) Copyright International Business Machines Corp. 2004
8 * 8 *
9 */ 9 */
10 10
11 11
12 #include <stdlib.h> 12 #include <stdlib.h>
13 #include <stdio.h> 13 #include <stdio.h>
14 #include <string.h> 14 #include <string.h>
15 15
16 #include "trousers/tss.h" 16 #include "trousers/tss.h"
17 #include "trousers_types.h" 17 #include "trousers_types.h"
18 #include "spi_utils.h" 18 #include "spi_utils.h"
19 #include "capabilities.h" 19 #include "capabilities.h"
20 #include "memmgr.h" 20 #include "memmgr.h"
21 #include "tsplog.h" 21 #include "tsplog.h"
22 #include "obj.h" 22 #include "obj.h"
23 23
24 static struct memTable *
25 __tspi_createTable()
26 {
27 struct memTable *table = NULL;
28 /*
29 * No table has yet been created to hold the memory allocations of
30 * this context, so we need to create one
31 */
32 table = calloc(1, sizeof(struct memTable));
33 if (table == NULL) {
34 LogError("malloc of %zd bytes failed.", sizeof(struct memTable)) ;
35 return NULL;
36 }
37 return (table);
38 }
39
24 /* caller needs to lock memtable lock */ 40 /* caller needs to lock memtable lock */
25 struct memTable * 41 struct memTable *
26 getTable(TSS_HCONTEXT tspContext) 42 getTable(TSS_HCONTEXT tspContext)
27 { 43 {
28 struct memTable *tmp; 44 struct memTable *tmp;
29 45
30 for (tmp = SpiMemoryTable; tmp; tmp = tmp->nextTable) 46 for (tmp = SpiMemoryTable; tmp; tmp = tmp->nextTable)
31 if (tmp->tspContext == tspContext) 47 if (tmp->tspContext == tspContext)
32 return tmp; 48 return tmp;
33 49
34 return NULL; 50 return NULL;
35 } 51 }
36 52
53 /* caller needs to lock memtable lock */
54 static void
55 __tspi_addTable(struct memTable *new)
56 {
57 struct memTable *tmp = SpiMemoryTable;
58
59 /* base case, this is the first table */
60 if (SpiMemoryTable == NULL) {
61 SpiMemoryTable = new;
62 return;
63 }
64
65 /* else add @new onto the end */
66 for (; tmp; tmp = tmp->nextTable)
67 if (tmp->nextTable == NULL) {
68 tmp->nextTable = new;
69 break;
70 }
71 }
72
37 /* caller needs to lock memtable lock and be sure the context mem slot for 73 /* caller needs to lock memtable lock and be sure the context mem slot for
38 * @tspContext exists before calling. 74 * @tspContext exists before calling.
39 */ 75 */
40 void 76 void
41 __tspi_addEntry(TSS_HCONTEXT tspContext, struct memEntry *new) 77 __tspi_addEntry(TSS_HCONTEXT tspContext, struct memEntry *new)
42 { 78 {
43 struct memTable *tmp = getTable(tspContext); 79 struct memTable *tmp = getTable(tspContext);
44 » struct memEntry *tmp_entry = tmp->entries; 80 » struct memEntry *tmp_entry;
81
82 » if (tmp == NULL) {
83 » » if ((tmp = __tspi_createTable()) == NULL)
84 » » » return;
85 » » tmp->tspContext = tspContext;
86 » » __tspi_addTable(tmp);
87 » }
88
89 » tmp_entry = tmp->entries;
45 90
46 if (tmp->entries == NULL) { 91 if (tmp->entries == NULL) {
47 tmp->entries = new; 92 tmp->entries = new;
48 return; 93 return;
49 } 94 }
50 95
51 /* else tack @new onto the end */ 96 /* else tack @new onto the end */
52 for (; tmp_entry; tmp_entry = tmp_entry->nextEntry) { 97 for (; tmp_entry; tmp_entry = tmp_entry->nextEntry) {
53 if (tmp_entry->nextEntry == NULL) { 98 if (tmp_entry->nextEntry == NULL) {
54 tmp_entry->nextEntry = new; 99 tmp_entry->nextEntry = new;
55 break; 100 break;
56 } 101 }
57 } 102 }
58 } 103 }
59 104
60 /* caller needs to lock memtable lock */ 105 /* caller needs to lock memtable lock */
61 void
62 __tspi_addTable(struct memTable *new)
63 {
64 struct memTable *tmp = SpiMemoryTable;
65
66 /* base case, this is the first table */
67 if (SpiMemoryTable == NULL) {
68 SpiMemoryTable = new;
69 return;
70 }
71
72 /* else add @new onto the end */
73 for (; tmp; tmp = tmp->nextTable)
74 if (tmp->nextTable == NULL) {
75 tmp->nextTable = new;
76 break;
77 }
78 }
79
80 /* caller needs to lock memtable lock */
81 TSS_RESULT 106 TSS_RESULT
82 __tspi_freeTable(TSS_HCONTEXT tspContext) 107 __tspi_freeTable(TSS_HCONTEXT tspContext)
83 { 108 {
84 struct memTable *prev = NULL, *index = NULL, *next = NULL; 109 struct memTable *prev = NULL, *index = NULL, *next = NULL;
85 struct memEntry *entry = NULL, *entry_next = NULL; 110 struct memEntry *entry = NULL, *entry_next = NULL;
86 111
87 for(index = SpiMemoryTable; index; index = index->nextTable) { 112 for(index = SpiMemoryTable; index; index = index->nextTable) {
88 next = index->nextTable; 113 next = index->nextTable;
89 if (index->tspContext == tspContext) { 114 if (index->tspContext == tspContext) {
90 for (entry = index->entries; entry; entry = entry_next) { 115 for (entry = index->entries; entry; entry = entry_next) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 void * 184 void *
160 calloc_tspi(TSS_HCONTEXT tspContext, UINT32 howMuch) 185 calloc_tspi(TSS_HCONTEXT tspContext, UINT32 howMuch)
161 { 186 {
162 struct memTable *table = NULL; 187 struct memTable *table = NULL;
163 struct memEntry *newEntry = NULL; 188 struct memEntry *newEntry = NULL;
164 189
165 MUTEX_LOCK(memtable_lock); 190 MUTEX_LOCK(memtable_lock);
166 191
167 table = getTable(tspContext); 192 table = getTable(tspContext);
168 if (table == NULL) { 193 if (table == NULL) {
169 » » /* no table has yet been created to hold the memory allocations of 194 » » if ((table = __tspi_createTable()) == NULL) {
170 » » * this context, so we need to create one
171 » » */
172 » » table = calloc(1, sizeof(struct memTable));
173 » » if (table == NULL) {
174 » » » LogError("malloc of %zd bytes failed.", sizeof(struct me mTable));
175 MUTEX_UNLOCK(memtable_lock); 195 MUTEX_UNLOCK(memtable_lock);
176 return NULL; 196 return NULL;
177 } 197 }
178 table->tspContext = tspContext; 198 table->tspContext = tspContext;
179 __tspi_addTable(table); 199 __tspi_addTable(table);
180 } 200 }
181 201
182 newEntry = calloc(1, sizeof(struct memEntry)); 202 newEntry = calloc(1, sizeof(struct memEntry));
183 if (newEntry == NULL) { 203 if (newEntry == NULL) {
184 LogError("malloc of %zd bytes failed.", sizeof(struct memEntry)) ; 204 LogError("malloc of %zd bytes failed.", sizeof(struct memEntry)) ;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 return TSPERR(TSS_E_INVALID_RESOURCE); 249 return TSPERR(TSS_E_INVALID_RESOURCE);
230 } 250 }
231 251
232 /* just free one entry */ 252 /* just free one entry */
233 result = __tspi_freeEntry(index, memPointer); 253 result = __tspi_freeEntry(index, memPointer);
234 254
235 MUTEX_UNLOCK(memtable_lock); 255 MUTEX_UNLOCK(memtable_lock);
236 256
237 return result; 257 return result;
238 } 258 }
OLDNEW
« no previous file with comments | « src/tspi/tsp_auth.c ('k') | src/tspi/tsp_maint.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698