aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSeiji Munetoh <seiji.munetoh@gmail.com>2006-05-31 00:25:47 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-05-31 19:27:10 -0400
commitde66a695bef17264b2472c06e981c068bfa0636e (patch)
treefcf9e1073978ed8626642ec404bb1bbadcbf18bb /drivers
parent25a6df952542ad9f284421b6ffe28f3eb3df1305 (diff)
[PATCH] tpm: bios log parsing fixes
From: Seiji Munetoh <seiji.munetoh@gmail.com> Fix "tcpa_pc_event" misalignment between enum, strings and TCG PC spec and output of the event which contains a hash data. Signed-off-by: Seiji Munetoh <seiji.munetoh@gmail.com> Acked-by: Kylene Hall <kjhall@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/char/tpm/tpm_bios.c41
1 files changed, 25 insertions, 16 deletions
diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c
index e45f0d3d12de..60380174f245 100644
--- a/drivers/char/tpm/tpm_bios.c
+++ b/drivers/char/tpm/tpm_bios.c
@@ -105,6 +105,12 @@ static const char* tcpa_event_type_strings[] = {
105 "Non-Host Info" 105 "Non-Host Info"
106}; 106};
107 107
108struct tcpa_pc_event {
109 u32 event_id;
110 u32 event_size;
111 u8 event_data[0];
112};
113
108enum tcpa_pc_event_ids { 114enum tcpa_pc_event_ids {
109 SMBIOS = 1, 115 SMBIOS = 1,
110 BIS_CERT, 116 BIS_CERT,
@@ -114,14 +120,15 @@ enum tcpa_pc_event_ids {
114 NVRAM, 120 NVRAM,
115 OPTION_ROM_EXEC, 121 OPTION_ROM_EXEC,
116 OPTION_ROM_CONFIG, 122 OPTION_ROM_CONFIG,
117 OPTION_ROM_MICROCODE, 123 OPTION_ROM_MICROCODE = 10,
118 S_CRTM_VERSION, 124 S_CRTM_VERSION,
119 S_CRTM_CONTENTS, 125 S_CRTM_CONTENTS,
120 POST_CONTENTS, 126 POST_CONTENTS,
127 HOST_TABLE_OF_DEVICES,
121}; 128};
122 129
123static const char* tcpa_pc_event_id_strings[] = { 130static const char* tcpa_pc_event_id_strings[] = {
124 "" 131 "",
125 "SMBIOS", 132 "SMBIOS",
126 "BIS Certificate", 133 "BIS Certificate",
127 "POST BIOS ", 134 "POST BIOS ",
@@ -130,11 +137,12 @@ static const char* tcpa_pc_event_id_strings[] = {
130 "NVRAM", 137 "NVRAM",
131 "Option ROM", 138 "Option ROM",
132 "Option ROM config", 139 "Option ROM config",
133 "Option ROM microcode", 140 "",
141 "Option ROM microcode ",
134 "S-CRTM Version", 142 "S-CRTM Version",
135 "S-CRTM Contents", 143 "S-CRTM Contents ",
136 "S-CRTM POST Contents", 144 "POST Contents ",
137 "POST Contents", 145 "Table of Devices",
138}; 146};
139 147
140/* returns pointer to start of pos. entry of tcg log */ 148/* returns pointer to start of pos. entry of tcg log */
@@ -206,7 +214,7 @@ static int get_event_name(char *dest, struct tcpa_event *event,
206 const char *name = ""; 214 const char *name = "";
207 char data[40] = ""; 215 char data[40] = "";
208 int i, n_len = 0, d_len = 0; 216 int i, n_len = 0, d_len = 0;
209 u32 event_id; 217 struct tcpa_pc_event *pc_event;
210 218
211 switch(event->event_type) { 219 switch(event->event_type) {
212 case PREBOOT: 220 case PREBOOT:
@@ -235,31 +243,32 @@ static int get_event_name(char *dest, struct tcpa_event *event,
235 } 243 }
236 break; 244 break;
237 case EVENT_TAG: 245 case EVENT_TAG:
238 event_id = be32_to_cpu(*((u32 *)event_entry)); 246 pc_event = (struct tcpa_pc_event *)event_entry;
239 247
240 /* ToDo Row data -> Base64 */ 248 /* ToDo Row data -> Base64 */
241 249
242 switch (event_id) { 250 switch (pc_event->event_id) {
243 case SMBIOS: 251 case SMBIOS:
244 case BIS_CERT: 252 case BIS_CERT:
245 case CMOS: 253 case CMOS:
246 case NVRAM: 254 case NVRAM:
247 case OPTION_ROM_EXEC: 255 case OPTION_ROM_EXEC:
248 case OPTION_ROM_CONFIG: 256 case OPTION_ROM_CONFIG:
249 case OPTION_ROM_MICROCODE:
250 case S_CRTM_VERSION: 257 case S_CRTM_VERSION:
251 case S_CRTM_CONTENTS: 258 name = tcpa_pc_event_id_strings[pc_event->event_id];
252 case POST_CONTENTS:
253 name = tcpa_pc_event_id_strings[event_id];
254 n_len = strlen(name); 259 n_len = strlen(name);
255 break; 260 break;
261 /* hash data */
256 case POST_BIOS_ROM: 262 case POST_BIOS_ROM:
257 case ESCD: 263 case ESCD:
258 name = tcpa_pc_event_id_strings[event_id]; 264 case OPTION_ROM_MICROCODE:
265 case S_CRTM_CONTENTS:
266 case POST_CONTENTS:
267 name = tcpa_pc_event_id_strings[pc_event->event_id];
259 n_len = strlen(name); 268 n_len = strlen(name);
260 for (i = 0; i < 20; i++) 269 for (i = 0; i < 20; i++)
261 d_len += sprintf(data, "%02x", 270 d_len += sprintf(&data[2*i], "%02x",
262 event_entry[8 + i]); 271 pc_event->event_data[i]);
263 break; 272 break;
264 default: 273 default:
265 break; 274 break;