From: Gang W. <gan...@in...> - 2012-11-27 08:23:19
|
changeset 92e5c5150791 in /hgroot/tboot/tboot details: http://tboot.hg.sourceforge.net:8000/hgroot/tboot/tboot?cmd=changeset;node=92e5c5150791 description: Classify all logs into different log levels Signed-off-by:Xiaokai Wang <xia...@in...> diffstat: include/tb_policy.h | 56 +++++----- include/tboot.h | 22 ++-- include/uuid.h | 2 +- tboot/common/acpi.c | 73 +++++++------- tboot/common/cmdline.c | 2 +- tboot/common/e820.c | 38 +++--- tboot/common/elf.c | 26 ++-- tboot/common/hash.c | 20 +- tboot/common/integrity.c | 78 +++++++------- tboot/common/linux.c | 42 ++++---- tboot/common/loader.c | 88 ++++++++-------- tboot/common/misc.c | 6 +- tboot/common/paging.c | 2 +- tboot/common/policy.c | 48 ++++---- tboot/common/tb_error.c | 40 +++--- tboot/common/tboot.c | 64 ++++++------ tboot/common/tpm.c | 208 ++++++++++++++++++++-------------------- tboot/txt/acmod.c | 237 +++++++++++++++++++++++----------------------- tboot/txt/errors.c | 16 +- tboot/txt/heap.c | 213 +++++++++++++++++++++--------------------- tboot/txt/mtrrs.c | 44 ++++---- tboot/txt/txt.c | 183 ++++++++++++++++++------------------ tboot/txt/verify.c | 90 ++++++++-------- tboot/txt/vmcs.c | 40 +++--- 24 files changed, 820 insertions(+), 818 deletions(-) diffs (truncated from 5127 to 300 lines): diff -r d799ca9fe154 -r 92e5c5150791 include/tb_policy.h --- a/include/tb_policy.h Tue Nov 27 14:59:31 2012 +0800 +++ b/include/tb_policy.h Tue Nov 27 14:59:42 2012 +0800 @@ -184,12 +184,12 @@ /* assumes policy has already been validated */ if ( pol_entry == NULL ) { - PRINT("Error: pol_entry pointer is NULL\n"); + PRINT(TBOOT_ERR"Error: pol_entry pointer is NULL\n"); return NULL; } if ( i < 0 || i >= pol_entry->num_hashes ) { - PRINT("Error: position is not correct.\n"); + PRINT(TBOOT_ERR"Error: position is not correct.\n"); return NULL; } @@ -203,12 +203,12 @@ /* assumes policy has already been validated */ if ( policy == NULL ) { - PRINT("Error: policy pointer is NULL\n"); + PRINT(TBOOT_ERR"Error: policy pointer is NULL\n"); return NULL; } if ( i < 0 || i >= policy->num_entries ) { - PRINT("Error: position is not correct.\n"); + PRINT(TBOOT_ERR"Error: position is not correct.\n"); return NULL; } @@ -227,7 +227,7 @@ /* assumes policy has already been validated */ if ( policy == NULL ) { - PRINT("Error: policy pointer is NULL\n"); + PRINT(TBOOT_ERR"Error: policy pointer is NULL\n"); return NULL; } @@ -250,96 +250,96 @@ static inline bool verify_policy(const tb_policy_t *policy, size_t size, bool print) { - if ( print ) PRINT("policy:\n"); + if ( print ) PRINT(TBOOT_DETA"policy:\n"); if ( policy == NULL ) { - if ( print ) PRINT("policy pointer is NULL\n"); + if ( print ) PRINT(TBOOT_ERR"policy pointer is NULL\n"); return false; } if ( size < sizeof(tb_policy_t) ) { - if ( print ) PRINT("size of policy is too small (%lu)\n", + if ( print ) PRINT(TBOOT_ERR"size of policy is too small (%lu)\n", (unsigned long)size); return false; } if ( policy->version != 0x02 ) { - if ( print ) PRINT("unsupported version (%u)\n", policy->version); + if ( print ) PRINT(TBOOT_ERR"unsupported version (%u)\n", policy->version); return false; } - if ( print ) PRINT("\t version: %u\n", policy->version); + if ( print ) PRINT(TBOOT_DETA"\t version: %u\n", policy->version); - if ( print ) PRINT("\t policy_type: %s\n", + if ( print ) PRINT(TBOOT_DETA"\t policy_type: %s\n", policy_type_to_string(policy->policy_type)); if ( policy->policy_type >= TB_POLTYPE_MAX ) return false; - if ( print ) PRINT("\t hash_alg: %s\n", + if ( print ) PRINT(TBOOT_DETA"\t hash_alg: %s\n", hash_alg_to_string(policy->hash_alg)); if ( policy->hash_alg != TB_HALG_SHA1 ) return false; - if ( print ) PRINT("\t policy_control: %08x (%s)\n", + if ( print ) PRINT(TBOOT_DETA"\t policy_control: %08x (%s)\n", policy->policy_control, policy_control_to_string(policy->policy_control)); - if ( print ) PRINT("\t num_entries: %u\n", policy->num_entries); + if ( print ) PRINT(TBOOT_DETA"\t num_entries: %u\n", policy->num_entries); const tb_policy_entry_t *pol_entry = policy->entries; for ( int i = 0; i < policy->num_entries; i++ ) { /* check header of policy entry */ if ( ((void *)pol_entry - (void *)policy + sizeof(*pol_entry)) > size ) { - if ( print ) PRINT("size of policy entry is too small (%lu)\n", + if ( print ) PRINT(TBOOT_ERR"size of policy entry is too small (%lu)\n", (unsigned long)size); return false; } - if ( print ) PRINT("\t policy entry[%d]:\n", i); + if ( print ) PRINT(TBOOT_DETA"\t policy entry[%d]:\n", i); if ( pol_entry->mod_num > TB_POL_MAX_MOD_NUM && pol_entry->mod_num != TB_POL_MOD_NUM_ANY ) { - if ( print ) PRINT("mod_num invalid (%u)\n", pol_entry->mod_num); + if ( print ) PRINT(TBOOT_ERR"mod_num invalid (%u)\n", pol_entry->mod_num); return false; } - if ( print ) PRINT("\t\t mod_num: "); + if ( print ) PRINT(TBOOT_DETA"\t\t mod_num: "); if ( pol_entry->mod_num == TB_POL_MOD_NUM_ANY ) { - if ( print ) PRINT("any\n"); + if ( print ) PRINT(TBOOT_DETA"any\n"); } else - if ( print ) PRINT("%u\n", pol_entry->mod_num); + if ( print ) PRINT(TBOOT_DETA"%u\n", pol_entry->mod_num); if ( pol_entry->pcr > TB_POL_MAX_PCR && pol_entry->pcr != TB_POL_PCR_NONE ) { - if ( print ) PRINT("pcr invalid (%u)\n", pol_entry->pcr); + if ( print ) PRINT(TBOOT_ERR"pcr invalid (%u)\n", pol_entry->pcr); return false; } - if ( print ) PRINT("\t\t pcr: "); + if ( print ) PRINT(TBOOT_DETA"\t\t pcr: "); if ( pol_entry->pcr == TB_POL_PCR_NONE ) { - if ( print ) PRINT("none\n"); + if ( print ) PRINT(TBOOT_DETA"none\n"); } else - if ( print ) PRINT("%u\n", pol_entry->pcr); + if ( print ) PRINT(TBOOT_DETA"%u\n", pol_entry->pcr); - if ( print ) PRINT("\t\t hash_type: %s\n", + if ( print ) PRINT(TBOOT_DETA"\t\t hash_type: %s\n", hash_type_to_string(pol_entry->hash_type)); if ( pol_entry->hash_type > TB_HTYPE_IMAGE ) return false; - if ( print ) PRINT("\t\t num_hashes: %u\n", pol_entry->num_hashes); + if ( print ) PRINT(TBOOT_DETA"\t\t num_hashes: %u\n", pol_entry->num_hashes); /* check all of policy */ if ( ((void *)pol_entry - (void *)policy + sizeof(*pol_entry) + pol_entry->num_hashes * get_hash_size(policy->hash_alg)) > size ) { - if ( print ) PRINT("size of policy entry is too small (%lu)\n", + if ( print ) PRINT(TBOOT_ERR"size of policy entry is too small (%lu)\n", (unsigned long)size); return false; } for ( int j = 0; j < pol_entry->num_hashes; j++ ) { if ( print ) { - PRINT("\t\t hashes[%d]: ", j); + PRINT(TBOOT_DETA"\t\t hashes[%d]: ", j); print_hash(get_policy_entry_hash(pol_entry, policy->hash_alg, j), policy->hash_alg); diff -r d799ca9fe154 -r 92e5c5150791 include/tboot.h --- a/include/tboot.h Tue Nov 27 14:59:31 2012 +0800 +++ b/include/tboot.h Tue Nov 27 14:59:42 2012 +0800 @@ -150,17 +150,17 @@ static inline void print_tboot_shared(const tboot_shared_t *tboot_shared) { - printk("tboot_shared data:\n"); - printk("\t version: %d\n", tboot_shared->version); - printk("\t log_addr: 0x%08x\n", tboot_shared->log_addr); - printk("\t shutdown_entry: 0x%08x\n", tboot_shared->shutdown_entry); - printk("\t shutdown_type: %d\n", tboot_shared->shutdown_type); - printk("\t tboot_base: 0x%08x\n", tboot_shared->tboot_base); - printk("\t tboot_size: 0x%x\n", tboot_shared->tboot_size); - printk("\t num_in_wfs: %u\n", tboot_shared->num_in_wfs); - printk("\t flags: 0x%8.8x\n", tboot_shared->flags); - printk("\t ap_wake_addr: 0x%08x\n", (uint32_t)tboot_shared->ap_wake_addr); - printk("\t ap_wake_trigger: %u\n", tboot_shared->ap_wake_trigger); + printk(TBOOT_DETA"tboot_shared data:\n"); + printk(TBOOT_DETA"\t version: %d\n", tboot_shared->version); + printk(TBOOT_DETA"\t log_addr: 0x%08x\n", tboot_shared->log_addr); + printk(TBOOT_DETA"\t shutdown_entry: 0x%08x\n", tboot_shared->shutdown_entry); + printk(TBOOT_DETA"\t shutdown_type: %d\n", tboot_shared->shutdown_type); + printk(TBOOT_DETA"\t tboot_base: 0x%08x\n", tboot_shared->tboot_base); + printk(TBOOT_DETA"\t tboot_size: 0x%x\n", tboot_shared->tboot_size); + printk(TBOOT_DETA"\t num_in_wfs: %u\n", tboot_shared->num_in_wfs); + printk(TBOOT_DETA"\t flags: 0x%8.8x\n", tboot_shared->flags); + printk(TBOOT_DETA"\t ap_wake_addr: 0x%08x\n", (uint32_t)tboot_shared->ap_wake_addr); + printk(TBOOT_DETA"\t ap_wake_trigger: %u\n", tboot_shared->ap_wake_trigger); } #endif /* __TBOOT_H__ */ diff -r d799ca9fe154 -r 92e5c5150791 include/uuid.h --- a/include/uuid.h Tue Nov 27 14:59:31 2012 +0800 +++ b/include/uuid.h Tue Nov 27 14:59:42 2012 +0800 @@ -59,7 +59,7 @@ static inline void print_uuid(const uuid_t *uuid) { - PRINT("{0x%08x, 0x%04x, 0x%04x, 0x%04x,\n" + PRINT(TBOOT_DETA"{0x%08x, 0x%04x, 0x%04x, 0x%04x,\n" "\t\t{0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}}", uuid->data1, (uint32_t)uuid->data2, (uint32_t)uuid->data3, (uint32_t)uuid->data4, (uint32_t)uuid->data5[0], diff -r d799ca9fe154 -r 92e5c5150791 tboot/common/acpi.c --- a/tboot/common/acpi.c Tue Nov 27 14:59:31 2012 +0800 +++ b/tboot/common/acpi.c Tue Nov 27 14:59:42 2012 +0800 @@ -61,18 +61,18 @@ const char *space_id[] = { "memory", "I/O", "PCI config space", "EC", "SMBus" }; - printk("%s GAS @ %p:\n", reg_name, reg); + printk(TBOOT_DETA"%s GAS @ %p:\n", reg_name, reg); if ( reg == NULL ) return; if ( reg->space_id >= ARRAY_SIZE(space_id) ) - printk("\t space_id: unsupported (%u)\n", reg->space_id); + printk(TBOOT_DETA"\t space_id: unsupported (%u)\n", reg->space_id); else - printk("\t space_id: %s\n", space_id[reg->space_id]); - printk("\t bit_width: %u\n", reg->bit_width); - printk("\t bit_offset: %u\n", reg->bit_offset); - printk("\t access_width: %u\n", reg->access_width); - printk("\t address: %Lx\n", reg->address); + printk(TBOOT_DETA"\t space_id: %s\n", space_id[reg->space_id]); + printk(TBOOT_DETA"\t bit_width: %u\n", reg->bit_width); + printk(TBOOT_DETA"\t bit_offset: %u\n", reg->bit_offset); + printk(TBOOT_DETA"\t access_width: %u\n", reg->access_width); + printk(TBOOT_DETA"\t address: %Lx\n", reg->address); } static inline struct acpi_rsdt *get_rsdt(void) @@ -83,7 +83,7 @@ static inline struct acpi_xsdt *get_xsdt(void) { if ( rsdp->rsdp_xsdt >= 0x100000000ULL ) { - printk("XSDT above 4GB\n"); + printk(TBOOT_ERR"XSDT above 4GB\n"); return NULL; } return (struct acpi_xsdt *)(uintptr_t)rsdp->rsdp_xsdt; @@ -110,12 +110,12 @@ if ( memcmp(rsdp->rsdp1.signature, RSDP_SIG, sizeof(rsdp->rsdp1.signature)) == 0 ) { if ( verify_acpi_checksum((uint8_t *)rsdp, RSDP_CHKSUM_LEN) ) { - printk("RSDP (v%u, %.6s) @ %p\n", rsdp->rsdp1.revision, + printk(TBOOT_DETA"RSDP (v%u, %.6s) @ %p\n", rsdp->rsdp1.revision, rsdp->rsdp1.oemid, rsdp); return true; } else { - printk("checksum failed.\n"); + printk(TBOOT_ERR"checksum failed.\n"); return false; } } @@ -137,7 +137,7 @@ if ( find_rsdp_in_range(RSDP_SCOPE2_LOW, RSDP_SCOPE2_HIGH) ) return true; - printk("cann't find RSDP\n"); + printk(TBOOT_ERR"cann't find RSDP\n"); rsdp = NULL; return false; } @@ -146,7 +146,7 @@ static struct acpi_table_header *find_table(const char *table_name) { if ( !find_rsdp() ) { - printk("no rsdp to use\n"); + printk(TBOOT_ERR"no rsdp to use\n"); return NULL; } @@ -168,7 +168,7 @@ struct acpi_rsdt *rsdt = get_rsdt(); if ( rsdt == NULL ) { - printk("rsdt is invalid.\n"); + printk(TBOOT_ERR"rsdt is invalid.\n"); return NULL; } @@ -182,7 +182,7 @@ } } - printk("cann't find %s table.\n", table_name); + printk(TBOOT_ERR"cann't find %s table.\n", table_name); return NULL; } @@ -196,7 +196,7 @@ /* find DMAR table and save it */ g_dmar_table = (struct acpi_table_header *)get_vtd_dmar_table(); - printk("DMAR table @ %p saved.\n", g_dmar_table); |
From: <Cha...@gd...> - 2012-12-17 21:10:05
|
All, A useful patch, but there are a couple of problems that it reveals. 1) It will always print out the TXT.ERRORCODE under level error, even when it is not an error. The same is true of TXT.STS, and TXT.E2STS 2) If the command line printed out at line 510 of tboot/common/policy.c is over 231 bytes in length, then what is printed out is the last mod 256 bytes of the printk, wiping out the level information, so that it always prints, and isn't really helpful in examining what was being measured. In addition, having the cmdline printed out as a single string is inconvenient - much nicer to chunk the cmdline into manageable chunks, one per line. Anyway, here is a patch to address both these problems. Signed off by: Charles H Fisher <Cha...@gd...> diff -up tboot-1.7.2/tboot/common/loader.c.orig tboot-1.7.2/tboot/common/loader.c --- tboot-1.7.2/tboot/common/loader.c.orig 2012-12-14 10:52:26.096536328 -0700 +++ tboot-1.7.2/tboot/common/loader.c 2012-12-14 11:09:07.860536433 -0700 @@ -91,8 +91,23 @@ void print_mbi(const multiboot_info_t *m printk(TBOOT_DETA"\t boot_device.third_partition: 0x%x\n", mbi->boot_device.third_partition); } - if ( mbi->flags & MBI_CMDLINE ) - printk(TBOOT_DETA"\t cmdline@0x%x: \"%s\"\n", mbi->cmdline, (char *)mbi->cmdline); + if ( mbi->flags & MBI_CMDLINE ) { +# define CHUNK_SIZE 72 + /* Break the command line up into 72 byte chunks */ + int cmdlen = strlen(mbi->cmdline); + char *cmdptr = (char *)mbi->cmdline; + char chunk[CHUNK_SIZE+1]; + printk(TBOOT_DETA"\t cmdline@0x%x: ", mbi->cmdline); + chunk[CHUNK_SIZE] = '\0'; + while (cmdlen > 0) { + strncpy(chunk, cmdptr, CHUNK_SIZE); + printk(TBOOT_DETA"\n\t\"%s\"", chunk); + cmdptr += CHUNK_SIZE; + cmdlen -= CHUNK_SIZE; + } + printk(TBOOT_DETA"\n"); + } + if ( mbi->flags & MBI_MODULES ) { printk(TBOOT_DETA"\t mods_count: %u, mods_addr: 0x%x\n", mbi->mods_count, mbi->mods_addr); diff -up tboot-1.7.2/tboot/common/policy.c.orig tboot-1.7.2/tboot/common/policy.c --- tboot-1.7.2/tboot/common/policy.c.orig 2012-12-14 11:44:28.461724185 -0700 +++ tboot-1.7.2/tboot/common/policy.c 2012-12-14 11:52:56.270435926 -0700 @@ -506,8 +506,23 @@ static tb_error_t verify_module(module_t size_t size = module->mod_end - module->mod_start; char *cmdline = (char *)module->string; - if ( pol_entry != NULL ) - printk(TBOOT_INFO"verifying module \"%s\"...\n", cmdline); + if ( pol_entry != NULL ) { + /* chunk the command line into 80 byte chunks */ +#define CHUNK_SIZE 80 + int cmdlen = strlen(cmdline); + char *cptr = cmdline; + char cmdchunk[CHUNK_SIZE+1]; + printk(TBOOT_INFO"verifying module \""); + while (cmdlen > 0) { + strncpy(cmdchunk, cptr, CHUNK_SIZE); + cmdchunk[CHUNK_SIZE] = 0; + printk(TBOOT_INFO"\n%s", cmdchunk); + cmdlen -= CHUNK_SIZE; + cptr += CHUNK_SIZE; + } + printk(TBOOT_INFO"\"...\n"); + } + tb_hash_t hash; if ( !hash_module(&hash, TB_HALG_SHA1, cmdline, base, size) ) { printk(TBOOT_ERR"\t hash cannot be generated.\n"); diff -up tboot-1.7.2/tboot/txt/errors.c.orig tboot-1.7.2/tboot/txt/errors.c --- tboot-1.7.2/tboot/txt/errors.c.orig 2012-12-14 10:12:08.048536400 -0700 +++ tboot-1.7.2/tboot/txt/errors.c 2012-12-14 10:32:02.718474141 -0700 @@ -55,7 +55,10 @@ static void display_errors(void) * display TXT.ERRORODE error */ err = (txt_errorcode_t)read_pub_config_reg(TXTCR_ERRORCODE); - printk(TBOOT_ERR"TXT.ERRORCODE: 0x%Lx\n", err._raw); + if (err._raw == 0 || err._raw == 0xc0000001) + printk(TBOOT_INFO"TXT.ERRORCODE: 0x%Lx\n", err._raw); + else + printk(TBOOT_ERR"TXT.ERRORCODE: 0x%Lx\n", err._raw); /* AC module error (don't know how to parse other errors) */ if ( err.valid ) { @@ -67,9 +70,14 @@ static void display_errors(void) printk(TBOOT_ERR"unknown SW error 0x%x:0x%x\n", sw_err.err1, sw_err.err2); else { /* ACM error */ acmod_err._raw = sw_err._raw; - printk(TBOOT_ERR"AC module error : acm_type=0x%x, progress=0x%02x, " - "error=0x%x\n", acmod_err.acm_type, acmod_err.progress, - acmod_err.error); + if (acmod_err._raw == 0x0 || acmod_err._raw == 0x1) + printk(TBOOT_INFO"AC module error : acm_type=0x%x, progress=0x%02x, " + "error=0x%x\n", acmod_err.acm_type, acmod_err.progress, + acmod_err.error); + else + printk(TBOOT_ERR"AC module error : acm_type=0x%x, progress=0x%02x, " + "error=0x%x\n", acmod_err.acm_type, acmod_err.progress, + acmod_err.error); /* error = 0x0a, progress = 0x0d => TPM error */ if ( acmod_err.error == 0x0a && acmod_err.progress == 0x0d ) printk(TBOOT_ERR"TPM error code = 0x%x\n", acmod_err.tpm_err); @@ -85,13 +93,19 @@ static void display_errors(void) * display TXT.ESTS error */ ests = (txt_ests_t)read_pub_config_reg(TXTCR_ESTS); - printk(TBOOT_ERR"TXT.ESTS: 0x%Lx\n", ests._raw); + if (ests._raw == 0) + printk(TBOOT_INFO"TXT.ESTS: 0x%Lx\n", ests._raw); + else + printk(TBOOT_ERR"TXT.ESTS: 0x%Lx\n", ests._raw); /* * display TXT.E2STS error */ e2sts = (txt_e2sts_t)read_pub_config_reg(TXTCR_E2STS); - printk(TBOOT_ERR"TXT.E2STS: 0x%Lx\n", e2sts._raw); + if (e2sts._raw == 0 || e2sts._raw == 0x200000000) + printk(TBOOT_INFO"TXT.E2STS: 0x%Lx\n", e2sts._raw); + else + printk(TBOOT_ERR"TXT.E2STS: 0x%Lx\n", e2sts._raw); } bool txt_get_error(void) |
From: Wei, G. <gan...@in...> - 2012-12-20 14:58:02
Attachments:
smime.p7s
|
Good fix, thx. Jimmy > -----Original Message----- > From: Cha...@gd... [mailto:Cha...@gd...] > Sent: Tuesday, December 18, 2012 5:08 AM > To: tbo...@li... > Subject: Re: [Tboot-changelog] changeset in tboot: Classify all logs intodifferent > log levels > > All, > A useful patch, but there are a couple of problems that it reveals. > > 1) It will always print out the TXT.ERRORCODE under level error, even > when it is not an error. The same is true of TXT.STS, and TXT.E2STS > 2) If the command line printed out at line 510 of tboot/common/policy.c > is over 231 bytes in length, then what is printed out is the last mod > 256 bytes of the printk, wiping out the level information, so that it > always prints, and isn't really helpful in examining what was being > measured. In addition, having the cmdline printed out as a single string > is inconvenient - much nicer to chunk the cmdline into manageable > chunks, one per line. > > Anyway, here is a patch to address both these problems. > > Signed off by: Charles H Fisher <Cha...@gd...> > > diff -up tboot-1.7.2/tboot/common/loader.c.orig > tboot-1.7.2/tboot/common/loader.c > --- tboot-1.7.2/tboot/common/loader.c.orig 2012-12-14 > 10:52:26.096536328 -0700 > +++ tboot-1.7.2/tboot/common/loader.c 2012-12-14 11:09:07.860536433 > -0700 > @@ -91,8 +91,23 @@ void print_mbi(const multiboot_info_t *m > printk(TBOOT_DETA"\t boot_device.third_partition: 0x%x\n", > mbi->boot_device.third_partition); > } > - if ( mbi->flags & MBI_CMDLINE ) > - printk(TBOOT_DETA"\t cmdline@0x%x: \"%s\"\n", mbi->cmdline, > (char *)mbi->cmdline); > + if ( mbi->flags & MBI_CMDLINE ) { > +# define CHUNK_SIZE 72 > + /* Break the command line up into 72 byte chunks */ > + int cmdlen = strlen(mbi->cmdline); > + char *cmdptr = (char *)mbi->cmdline; > + char chunk[CHUNK_SIZE+1]; > + printk(TBOOT_DETA"\t cmdline@0x%x: ", mbi->cmdline); > + chunk[CHUNK_SIZE] = '\0'; > + while (cmdlen > 0) { > + strncpy(chunk, cmdptr, CHUNK_SIZE); > + printk(TBOOT_DETA"\n\t\"%s\"", chunk); > + cmdptr += CHUNK_SIZE; > + cmdlen -= CHUNK_SIZE; > + } > + printk(TBOOT_DETA"\n"); > + } > + > if ( mbi->flags & MBI_MODULES ) { > printk(TBOOT_DETA"\t mods_count: %u, mods_addr: 0x%x\n", > mbi->mods_count, > mbi->mods_addr); > diff -up tboot-1.7.2/tboot/common/policy.c.orig > tboot-1.7.2/tboot/common/policy.c > --- tboot-1.7.2/tboot/common/policy.c.orig 2012-12-14 > 11:44:28.461724185 -0700 > +++ tboot-1.7.2/tboot/common/policy.c 2012-12-14 11:52:56.270435926 > -0700 > @@ -506,8 +506,23 @@ static tb_error_t verify_module(module_t > size_t size = module->mod_end - module->mod_start; > char *cmdline = (char *)module->string; > > - if ( pol_entry != NULL ) > - printk(TBOOT_INFO"verifying module \"%s\"...\n", cmdline); > + if ( pol_entry != NULL ) { > + /* chunk the command line into 80 byte chunks */ > +#define CHUNK_SIZE 80 > + int cmdlen = strlen(cmdline); > + char *cptr = cmdline; > + char cmdchunk[CHUNK_SIZE+1]; > + printk(TBOOT_INFO"verifying module \""); > + while (cmdlen > 0) { > + strncpy(cmdchunk, cptr, CHUNK_SIZE); > + cmdchunk[CHUNK_SIZE] = 0; > + printk(TBOOT_INFO"\n%s", cmdchunk); > + cmdlen -= CHUNK_SIZE; > + cptr += CHUNK_SIZE; > + } > + printk(TBOOT_INFO"\"...\n"); > + } > + > tb_hash_t hash; > if ( !hash_module(&hash, TB_HALG_SHA1, cmdline, base, size) ) { > printk(TBOOT_ERR"\t hash cannot be generated.\n"); > diff -up tboot-1.7.2/tboot/txt/errors.c.orig > tboot-1.7.2/tboot/txt/errors.c > --- tboot-1.7.2/tboot/txt/errors.c.orig 2012-12-14 10:12:08.048536400 > -0700 > +++ tboot-1.7.2/tboot/txt/errors.c 2012-12-14 10:32:02.718474141 > -0700 > @@ -55,7 +55,10 @@ static void display_errors(void) > * display TXT.ERRORODE error > */ > err = (txt_errorcode_t)read_pub_config_reg(TXTCR_ERRORCODE); > - printk(TBOOT_ERR"TXT.ERRORCODE: 0x%Lx\n", err._raw); > + if (err._raw == 0 || err._raw == 0xc0000001) > + printk(TBOOT_INFO"TXT.ERRORCODE: 0x%Lx\n", err._raw); > + else > + printk(TBOOT_ERR"TXT.ERRORCODE: 0x%Lx\n", err._raw); > > /* AC module error (don't know how to parse other errors) */ > if ( err.valid ) { > @@ -67,9 +70,14 @@ static void display_errors(void) > printk(TBOOT_ERR"unknown SW error 0x%x:0x%x\n", > sw_err.err1, sw_err.err2); > else { /* ACM error */ > acmod_err._raw = sw_err._raw; > - printk(TBOOT_ERR"AC module error : acm_type=0x%x, > progress=0x%02x, " > - "error=0x%x\n", acmod_err.acm_type, > acmod_err.progress, > - acmod_err.error); > + if (acmod_err._raw == 0x0 || acmod_err._raw == 0x1) > + printk(TBOOT_INFO"AC module error : > acm_type=0x%x, > progress=0x%02x, " > + "error=0x%x\n", acmod_err.acm_type, > acmod_err.progress, > + acmod_err.error); > + else > + printk(TBOOT_ERR"AC module error : > acm_type=0x%x, > progress=0x%02x, " > + "error=0x%x\n", acmod_err.acm_type, > acmod_err.progress, > + acmod_err.error); > /* error = 0x0a, progress = 0x0d => TPM error */ > if ( acmod_err.error == 0x0a && acmod_err.progress == > 0x0d ) > printk(TBOOT_ERR"TPM error code = 0x%x\n", > acmod_err.tpm_err); > @@ -85,13 +93,19 @@ static void display_errors(void) > * display TXT.ESTS error > */ > ests = (txt_ests_t)read_pub_config_reg(TXTCR_ESTS); > - printk(TBOOT_ERR"TXT.ESTS: 0x%Lx\n", ests._raw); > + if (ests._raw == 0) > + printk(TBOOT_INFO"TXT.ESTS: 0x%Lx\n", ests._raw); > + else > + printk(TBOOT_ERR"TXT.ESTS: 0x%Lx\n", ests._raw); > > /* > * display TXT.E2STS error > */ > e2sts = (txt_e2sts_t)read_pub_config_reg(TXTCR_E2STS); > - printk(TBOOT_ERR"TXT.E2STS: 0x%Lx\n", e2sts._raw); > + if (e2sts._raw == 0 || e2sts._raw == 0x200000000) > + printk(TBOOT_INFO"TXT.E2STS: 0x%Lx\n", e2sts._raw); > + else > + printk(TBOOT_ERR"TXT.E2STS: 0x%Lx\n", e2sts._raw); > } > > bool txt_get_error(void) > > > > > > ---------------------------------------------------------------------------- -- > LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial > Remotely access PCs and mobile devices and provide instant support > Improve your efficiency, and focus on delivering more value-add services > Discover what IT Professionals Know. Rescue delivers > http://p.sf.net/sfu/logmein_12329d2d > _______________________________________________ > Tboot-changelog mailing list > Tbo...@li... > https://lists.sourceforge.net/lists/listinfo/tboot-changelog |