From 0fc84d36ecd05f1256c5769fe601973c50d175b571d1fb9560992c9cf81e6b1e Mon Sep 17 00:00:00 2001 From: Matthias Gerstner Date: Fri, 31 Aug 2018 14:26:49 +0000 Subject: [PATCH] - update to upstream version 1.9.7. This in mainly a bugfix release: Fix a lot of issues in tools reported by klocwork scan. Fix a lot of issues in tboot module reported by klocwork scan. Remove a redundant tboot option Fix indent in heap.c Fix 4 issues along with extpol=agile option Mitigations for tpm interposer attacks Add an option in tboot to force SINIT to use the legacy TPM2 log format. Add support for appending to a TPM2 TCG style event log. Ensure tboot log is available even when measured launch is skipped. Add centos7 instructions for Use in EFI boot mode. Fix memory leak and invalid reads and writes issues. Fix TPM 1.2 locality selection issue. Fix a null pointer dereference bug when Intel TXT is disabled. Optimize tboot docs installation. Fix security vulnerabilities rooted in tpm_if structure and g_tpm variable. The size field of the MB2 tag is the size of the tag header + the size Fix openssl-1.0.2 double frees Make policy element stm_elt use unique type name lcptools-v2 utilities fixes port to openssl-1.1.0 Reset debug PCR16 to zero. Fix a logical error in function bool evtlog_append(...). - removed tboot-CVE-2017-16837.patch: now contained in tarball - removed tboot-openssl-1-1-0.patch: now contained in tarball - removed tboot-signature-segfault.patch: now contained in tarball - removed tboot-ssl-broken.patch: now contained in tarball OBS-URL: https://build.opensuse.org/package/show/security/tboot?expand=0&rev=78 --- tboot-1.9.6.tar.gz | 3 - tboot-1.9.7.tar.gz | 3 + tboot-CVE-2017-16837.patch | 1059 -------------------------------- tboot-openssl-1-1-0.patch | 32 - tboot-signature-segfault.patch | 80 --- tboot-ssl-broken.patch | 268 -------- tboot.changes | 31 + tboot.spec | 16 +- 8 files changed, 36 insertions(+), 1456 deletions(-) delete mode 100644 tboot-1.9.6.tar.gz create mode 100644 tboot-1.9.7.tar.gz delete mode 100644 tboot-CVE-2017-16837.patch delete mode 100644 tboot-openssl-1-1-0.patch delete mode 100644 tboot-signature-segfault.patch delete mode 100644 tboot-ssl-broken.patch diff --git a/tboot-1.9.6.tar.gz b/tboot-1.9.6.tar.gz deleted file mode 100644 index 3e931c0..0000000 --- a/tboot-1.9.6.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1b55eed6ca8196b2a003936594248a242888ac34ff970eda651e7660c4772a39 -size 693564 diff --git a/tboot-1.9.7.tar.gz b/tboot-1.9.7.tar.gz new file mode 100644 index 0000000..ed16f84 --- /dev/null +++ b/tboot-1.9.7.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b641c9b0e80e4a01d6a83dc4c17745a06f37adc72d3a020eefb77b97fd562bb +size 662608 diff --git a/tboot-CVE-2017-16837.patch b/tboot-CVE-2017-16837.patch deleted file mode 100644 index 4abea17..0000000 --- a/tboot-CVE-2017-16837.patch +++ /dev/null @@ -1,1059 +0,0 @@ -changeset: 508:521c58e51eb5 -tag: tip -user: Ning Sun -date: Mon Nov 13 12:02:07 2017 -0800 -summary: Fix security vulnerabilities rooted in tpm_if structure and g_tpm variable. - -Index: tboot-1.9.6/tboot/common/cmdline.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/cmdline.c -+++ tboot-1.9.6/tboot/common/cmdline.c -@@ -503,28 +503,29 @@ bool get_tboot_measure_nv(void) - void get_tboot_extpol(void) - { - const char *extpol = get_option_val(g_tboot_cmdline_options, g_tboot_param_values, "extpol"); -+ struct tpm_if *tpm = get_tpm(); - - if ( extpol == NULL ) { -- g_tpm->extpol = TB_EXTPOL_FIXED; -- g_tpm->cur_alg = TB_HALG_SHA256; -+ tpm->extpol = TB_EXTPOL_FIXED; -+ tpm->cur_alg = TB_HALG_SHA256; - return; - } - - if ( strcmp(extpol, "agile") == 0 ) { -- g_tpm->extpol = TB_EXTPOL_AGILE; -- g_tpm->cur_alg = TB_HALG_SHA256; -+ tpm->extpol = TB_EXTPOL_AGILE; -+ tpm->cur_alg = TB_HALG_SHA256; - } else if ( strcmp(extpol, "embedded") == 0 ) { -- g_tpm->extpol = TB_EXTPOL_EMBEDDED; -- g_tpm->cur_alg = TB_HALG_SHA256; -+ tpm->extpol = TB_EXTPOL_EMBEDDED; -+ tpm->cur_alg = TB_HALG_SHA256; - } else if ( strcmp(extpol, "sha256") == 0 ) { -- g_tpm->extpol = TB_EXTPOL_FIXED; -- g_tpm->cur_alg = TB_HALG_SHA256; -+ tpm->extpol = TB_EXTPOL_FIXED; -+ tpm->cur_alg = TB_HALG_SHA256; - } else if ( strcmp(extpol, "sha1") == 0 ) { -- g_tpm->extpol = TB_EXTPOL_FIXED; -- g_tpm->cur_alg = TB_HALG_SHA1; -+ tpm->extpol = TB_EXTPOL_FIXED; -+ tpm->cur_alg = TB_HALG_SHA1; - } else if ( strcmp(extpol, "sm3") == 0 ) { -- g_tpm->extpol = TB_EXTPOL_FIXED; -- g_tpm->cur_alg = TB_HALG_SM3; -+ tpm->extpol = TB_EXTPOL_FIXED; -+ tpm->cur_alg = TB_HALG_SM3; - } - } - -Index: tboot-1.9.6/tboot/common/integrity.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/integrity.c -+++ tboot-1.9.6/tboot/common/integrity.c -@@ -87,8 +87,10 @@ typedef struct { - - static bool extend_pcrs(void) - { -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - for ( int i = 0; i < g_pre_k_s3_state.num_vl_entries; i++ ) { -- if ( !g_tpm->pcr_extend(g_tpm, 2, g_pre_k_s3_state.vl_entries[i].pcr, -+ if ( !tpm_fp->pcr_extend(tpm, 2, g_pre_k_s3_state.vl_entries[i].pcr, - &g_pre_k_s3_state.vl_entries[i].hl) ) - return false; - if ( !evtlog_append(g_pre_k_s3_state.vl_entries[i].pcr, -@@ -102,13 +104,15 @@ static bool extend_pcrs(void) - - static void print_pre_k_s3_state(void) - { -+ struct tpm_if *tpm = get_tpm(); -+ - printk(TBOOT_DETA"pre_k_s3_state:\n"); - printk(TBOOT_DETA"\t vtd_pmr_lo_base: 0x%Lx\n", g_pre_k_s3_state.vtd_pmr_lo_base); - printk(TBOOT_DETA"\t vtd_pmr_lo_size: 0x%Lx\n", g_pre_k_s3_state.vtd_pmr_lo_size); - printk(TBOOT_DETA"\t vtd_pmr_hi_base: 0x%Lx\n", g_pre_k_s3_state.vtd_pmr_hi_base); - printk(TBOOT_DETA"\t vtd_pmr_hi_size: 0x%Lx\n", g_pre_k_s3_state.vtd_pmr_hi_size); - printk(TBOOT_DETA"\t pol_hash: "); -- print_hash(&g_pre_k_s3_state.pol_hash, g_tpm->cur_alg); -+ print_hash(&g_pre_k_s3_state.pol_hash, tpm->cur_alg); - printk(TBOOT_DETA"\t VL measurements:\n"); - for ( unsigned int i = 0; i < g_pre_k_s3_state.num_vl_entries; i++ ) { - printk(TBOOT_DETA"\t PCR %d (alg count %d):\n", -@@ -141,16 +145,18 @@ static bool seal_data(const void *data, - uint8_t secrets[secrets_size]; - } blob; - uint32_t err; -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - memset(&blob, 0, sizeof(blob)); -- if ( !hash_buffer(data, data_size, &blob.data_hash, g_tpm->cur_alg) ) { -+ if ( !hash_buffer(data, data_size, &blob.data_hash, tpm->cur_alg) ) { - printk(TBOOT_ERR"failed to hash data\n"); - return false; - } - - if ( secrets != NULL && secrets_size > 0 ) memcpy(blob.secrets, secrets, secrets_size); - -- err = g_tpm->seal(g_tpm, 2, sizeof(blob), (const uint8_t *)&blob, sealed_data_size, sealed_data); -+ err = tpm_fp->seal(tpm, 2, sizeof(blob), (const uint8_t *)&blob, sealed_data_size, sealed_data); - if ( !err ) printk(TBOOT_WARN"failed to seal data\n"); - - /* since blob might contain secret, clear it */ -@@ -167,9 +173,11 @@ static bool verify_sealed_data(const uin - uint8_t secrets[secrets_size]; - } blob; - bool err = true; -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - uint32_t data_size = sizeof(blob); -- if ( !g_tpm->unseal(g_tpm, g_tpm->cur_loc, sealed_data_size, sealed_data, &data_size, (uint8_t *)&blob) ) { -+ if ( !tpm_fp->unseal(tpm, tpm->cur_loc, sealed_data_size, sealed_data, &data_size, (uint8_t *)&blob) ) { - printk(TBOOT_ERR"failed to unseal blob\n"); - return false; - } -@@ -181,11 +189,11 @@ static bool verify_sealed_data(const uin - /* verify that (hash of) current data maches sealed hash */ - tb_hash_t curr_data_hash; - memset(&curr_data_hash, 0, sizeof(curr_data_hash)); -- if ( !hash_buffer(curr_data, curr_data_size, &curr_data_hash, g_tpm->cur_alg) ) { -+ if ( !hash_buffer(curr_data, curr_data_size, &curr_data_hash, tpm->cur_alg) ) { - printk(TBOOT_WARN"failed to hash state data\n"); - goto done; - } -- if ( !are_hashes_equal(&blob.data_hash, &curr_data_hash, g_tpm->cur_alg) ) { -+ if ( !are_hashes_equal(&blob.data_hash, &curr_data_hash, tpm->cur_alg) ) { - printk(TBOOT_WARN"sealed hash does not match current hash\n"); - goto done; - } -@@ -208,9 +216,12 @@ static bool verify_sealed_data(const uin - */ - bool seal_pre_k_state(void) - { -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); -+ - /* save hash of current policy into g_pre_k_s3_state */ - memset(&g_pre_k_s3_state.pol_hash, 0, sizeof(g_pre_k_s3_state.pol_hash)); -- if ( !hash_policy(&g_pre_k_s3_state.pol_hash, g_tpm->cur_alg) ) { -+ if ( !hash_policy(&g_pre_k_s3_state.pol_hash, tpm->cur_alg) ) { - printk(TBOOT_ERR"failed to hash policy\n"); - goto error; - } -@@ -218,9 +229,9 @@ bool seal_pre_k_state(void) - print_pre_k_s3_state(); - - /* read PCR 17/18, only for tpm1.2 */ -- if ( g_tpm->major == TPM12_VER_MAJOR ) { -- if ( !g_tpm->pcr_read(g_tpm, 2, 17, &post_launch_pcr17) || -- !g_tpm->pcr_read(g_tpm, 2, 18, &post_launch_pcr18) ) -+ if ( tpm->major == TPM12_VER_MAJOR ) { -+ if ( !tpm_fp->pcr_read(tpm, 2, 17, &post_launch_pcr17) || -+ !tpm_fp->pcr_read(tpm, 2, 18, &post_launch_pcr18) ) - goto error; - } - -@@ -371,11 +382,13 @@ static bool measure_memory_integrity(vma - bool verify_integrity(void) - { - tpm_pcr_value_t pcr17, pcr18; -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - /* read PCR 17/18, only for tpm1.2 */ -- if ( g_tpm->major == TPM12_VER_MAJOR ) { -- if ( !g_tpm->pcr_read(g_tpm, 2, 17, &pcr17) || -- !g_tpm->pcr_read(g_tpm, 2, 18, &pcr18) ) -+ if ( tpm->major == TPM12_VER_MAJOR ) { -+ if ( !tpm_fp->pcr_read(tpm, 2, 17, &pcr17) || -+ !tpm_fp->pcr_read(tpm, 2, 18, &pcr18) ) - goto error; - printk(TBOOT_DETA"PCRs before unseal:\n"); - printk(TBOOT_DETA" PCR 17: "); -@@ -391,7 +404,7 @@ bool verify_integrity(void) - NULL, 0) ) - goto error; - -- if ( !g_tpm->verify_creation(g_tpm, sealed_post_k_state_size, sealed_post_k_state) ) { -+ if ( !tpm_fp->verify_creation(tpm, sealed_post_k_state_size, sealed_post_k_state) ) { - printk(TBOOT_ERR"extended PCR values don't match creation values in sealed blob.\n"); - goto error; - } -@@ -440,7 +453,7 @@ bool verify_integrity(void) - /* since we can't leave the system without any measurments representing the - code-about-to-execute, and yet there is no integrity of that code, - just cap PCR 18 */ -- if ( !g_tpm->cap_pcrs(g_tpm, g_tpm->cur_loc, 18) ) -+ if ( !tpm_fp->cap_pcrs(tpm, tpm->cur_loc, 18) ) - apply_policy(TB_ERR_FATAL); - return false; - } -@@ -452,6 +465,8 @@ bool verify_integrity(void) - bool seal_post_k_state(void) - { - sealed_secrets_t secrets; -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - /* since tboot relies on the module it launches for resource protection, - that module should have at least one region for itself, otherwise -@@ -464,7 +479,7 @@ bool seal_post_k_state(void) - /* calculate the memory integrity hash */ - uint32_t key_size = sizeof(secrets.mac_key); - /* key must be random and secret even though auth not necessary */ -- if ( !g_tpm->get_random(g_tpm, g_tpm->cur_loc, secrets.mac_key, &key_size) ||key_size != sizeof(secrets.mac_key) ) return false; -+ if ( !tpm_fp->get_random(tpm, tpm->cur_loc, secrets.mac_key, &key_size) ||key_size != sizeof(secrets.mac_key) ) return false; - if ( !measure_memory_integrity(&g_post_k_s3_state.kernel_integ, secrets.mac_key) ) return false; - - /* copy s3_key into secrets to be sealed */ -Index: tboot-1.9.6/tboot/common/loader.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/loader.c -+++ tboot-1.9.6/tboot/common/loader.c -@@ -1355,15 +1355,15 @@ bool launch_kernel(bool is_measured_laun - - void *kernel_entry_point; - uint32_t mb_type = MB_NONE; -- -+ struct tpm_if *tpm = get_tpm(); - - if (g_tpm_family != TPM_IF_20_CRB ) { -- if (!release_locality(g_tpm->cur_loc)) -- printk(TBOOT_ERR"Release TPM FIFO locality %d failed \n", g_tpm->cur_loc); -+ if (!release_locality(tpm->cur_loc)) -+ printk(TBOOT_ERR"Release TPM FIFO locality %d failed \n", tpm->cur_loc); - } - else { -- if (!tpm_relinquish_locality_crb(g_tpm->cur_loc)) -- printk(TBOOT_ERR"Relinquish TPM CRB locality %d failed \n", g_tpm->cur_loc); -+ if (!tpm_relinquish_locality_crb(tpm->cur_loc)) -+ printk(TBOOT_ERR"Relinquish TPM CRB locality %d failed \n", tpm->cur_loc); - if (!tpm_workaround_crb()) - printk(TBOOT_ERR"CRB workaround failed \n"); - } -Index: tboot-1.9.6/tboot/common/policy.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/policy.c -+++ tboot-1.9.6/tboot/common/policy.c -@@ -209,13 +209,15 @@ static bool read_policy_from_tpm(uint32_ - unsigned int offset = 0; - unsigned int data_size = 0; - uint32_t ret, index_size; -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - if ( policy_index_size == NULL ) { - printk(TBOOT_ERR"size is NULL\n"); - return false; - } - -- ret = g_tpm->get_nvindex_size(g_tpm, g_tpm->cur_loc, index, &index_size); -+ ret = tpm_fp->get_nvindex_size(tpm, tpm->cur_loc, index, &index_size); - if ( !ret ) - return false; - -@@ -233,7 +235,7 @@ static bool read_policy_from_tpm(uint32_ - data_size = (uint32_t)(index_size - offset); - - /* read! */ -- ret = g_tpm->nv_read(g_tpm, g_tpm->cur_loc, index, offset, -+ ret = tpm_fp->nv_read(tpm, tpm->cur_loc, index, offset, - (uint8_t *)policy_index + offset, &data_size); - if ( !ret || data_size == 0 ) - break; -@@ -330,10 +332,12 @@ static bool unwrap_lcp_policy(void) - */ - tb_error_t set_policy(void) - { -+ const struct tpm_if *tpm = get_tpm(); -+ - /* try to read tboot policy from TB_POLICY_INDEX in TPM NV */ - size_t policy_index_size = sizeof(_policy_index_buf); - printk(TBOOT_INFO"reading Verified Launch Policy from TPM NV...\n"); -- if ( read_policy_from_tpm(g_tpm->tb_policy_index, -+ if ( read_policy_from_tpm(tpm->tb_policy_index, - _policy_index_buf, &policy_index_size) ) { - printk(TBOOT_DETA"\t:%lu bytes read\n", policy_index_size); - if ( verify_policy((tb_policy_t *)_policy_index_buf, -@@ -349,7 +353,7 @@ tb_error_t set_policy(void) - * type is LCP_POLTYPE_LIST (since we could have been give a policy data - * file even though the policy was not a LIST */ - printk(TBOOT_INFO"reading Launch Control Policy from TPM NV...\n"); -- if ( read_policy_from_tpm(g_tpm->lcp_own_index, -+ if ( read_policy_from_tpm(tpm->lcp_own_index, - _policy_index_buf, &policy_index_size) ) { - printk(TBOOT_DETA"\t:%lu bytes read\n", policy_index_size); - /* assume lcp policy has been verified by sinit already */ -@@ -411,6 +415,9 @@ static bool hash_module(hash_list_t *hl, - const char* cmdline, void *base, - size_t size) - { -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); -+ - if ( hl == NULL ) { - printk(TBOOT_ERR"Error: input parameter is wrong.\n"); - return false; -@@ -427,19 +434,19 @@ static bool hash_module(hash_list_t *hl, - // else - // cmdline = skip_filename(cmdline); - -- switch (g_tpm->extpol) { -+ switch (tpm->extpol) { - case TB_EXTPOL_FIXED: - hl->count = 1; -- hl->entries[0].alg = g_tpm->cur_alg; -+ hl->entries[0].alg = tpm->cur_alg; - - if ( !hash_buffer((const unsigned char *)cmdline, strlen(cmdline), -- &hl->entries[0].hash, g_tpm->cur_alg) ) -+ &hl->entries[0].hash, tpm->cur_alg) ) - return false; - /* hash image and extend into cmdline hash */ - tb_hash_t img_hash; -- if ( !hash_buffer(base, size, &img_hash, g_tpm->cur_alg) ) -+ if ( !hash_buffer(base, size, &img_hash, tpm->cur_alg) ) - return false; -- if ( !extend_hash(&hl->entries[0].hash, &img_hash, g_tpm->cur_alg) ) -+ if ( !extend_hash(&hl->entries[0].hash, &img_hash, tpm->cur_alg) ) - return false; - - break; -@@ -447,16 +454,16 @@ static bool hash_module(hash_list_t *hl, - case TB_EXTPOL_AGILE: - { - hash_list_t img_hl, final_hl; -- if ( !g_tpm->hash(g_tpm, 2, (const unsigned char *)cmdline, -+ if ( !tpm_fp->hash(tpm, 2, (const unsigned char *)cmdline, - strlen(cmdline), hl) ) { -- if ( !g_tpm->hash(g_tpm, 2, base, size, hl) ) -+ if ( !tpm_fp->hash(tpm, 2, base, size, hl) ) - return false; - return true; - } - - uint8_t buf[128]; - -- if ( !g_tpm->hash(g_tpm, 2, base, size, &img_hl) ) -+ if ( !tpm_fp->hash(tpm, 2, base, size, &img_hl) ) - return false; - for (unsigned int i=0; icount; i++) { - for (unsigned int j=0; jentries[i].alg); - copy_hash((tb_hash_t *)buf + get_hash_size(hl->entries[i].alg), - &img_hl.entries[j].hash, hl->entries[i].alg); -- if ( !g_tpm->hash(g_tpm, 2, buf, -+ if ( !tpm_fp->hash(tpm, 2, buf, - 2*get_hash_size(hl->entries[i].alg), &final_hl) ) - return false; - -@@ -489,16 +496,16 @@ static bool hash_module(hash_list_t *hl, - case TB_EXTPOL_EMBEDDED: - { - tb_hash_t img_hash; -- hl->count = g_tpm->alg_count; -+ hl->count = tpm->alg_count; - for (unsigned int i=0; icount; i++) { -- hl->entries[i].alg = g_tpm->algs[i]; -+ hl->entries[i].alg = tpm->algs[i]; - if ( !hash_buffer((const unsigned char *)cmdline, strlen(cmdline), -- &hl->entries[i].hash, g_tpm->algs[i]) ) -+ &hl->entries[i].hash, tpm->algs[i]) ) - return false; - -- if ( !hash_buffer(base, size, &img_hash, g_tpm->algs[i]) ) -+ if ( !hash_buffer(base, size, &img_hash, tpm->algs[i]) ) - return false; -- if ( !extend_hash(&hl->entries[i].hash, &img_hash, g_tpm->algs[i]) ) -+ if ( !extend_hash(&hl->entries[i].hash, &img_hash, tpm->algs[i]) ) - return false; - } - -@@ -616,6 +623,7 @@ static tb_error_t verify_module(module_t - void *base = (void *)module->mod_start; - size_t size = module->mod_end - module->mod_start; - char *cmdline = get_module_cmd(g_ldr_ctx, module); -+ const struct tpm_if *tpm = get_tpm(); - - if ( pol_entry != NULL ) { - /* chunk the command line into 80 byte chunks */ -@@ -653,7 +661,7 @@ static tb_error_t verify_module(module_t - VL_ENTRIES(NUM_VL_ENTRIES++).hl = hl; - } - -- if ( g_tpm->extpol != TB_EXTPOL_FIXED ) -+ if ( tpm->extpol != TB_EXTPOL_FIXED ) - return TB_ERR_NONE; - - if ( pol_entry != NULL && -@@ -671,6 +679,9 @@ static tb_error_t verify_module(module_t - - static void verify_g_policy(void) - { -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); -+ - /* assumes mbi is valid */ - printk(TBOOT_INFO"verifying policy \n"); - -@@ -682,35 +693,35 @@ static void verify_g_policy(void) - memcpy(buf, &g_policy->policy_control, sizeof(g_policy->policy_control)); - if ( g_policy->policy_control & TB_POLCTL_EXTEND_PCR17 ) { - if ( !hash_policy((tb_hash_t *)&buf[sizeof(g_policy->policy_control)], -- g_tpm->cur_alg) ) { -+ tpm->cur_alg) ) { - printk(TBOOT_ERR"policy hash failed\n"); - apply_policy(TB_ERR_MODULE_VERIFICATION_FAILED); - } - } - -- u32 size = get_hash_size(g_tpm->cur_alg) + sizeof(g_policy->policy_control); -- switch (g_tpm->extpol) { -+ u32 size = get_hash_size(tpm->cur_alg) + sizeof(g_policy->policy_control); -+ switch (tpm->extpol) { - case TB_EXTPOL_FIXED: - VL_ENTRIES(NUM_VL_ENTRIES).hl.count = 1; -- VL_ENTRIES(NUM_VL_ENTRIES).hl.entries[0].alg = g_tpm->cur_alg; -+ VL_ENTRIES(NUM_VL_ENTRIES).hl.entries[0].alg = tpm->cur_alg; - if ( !hash_buffer(buf, size, -- &VL_ENTRIES(NUM_VL_ENTRIES).hl.entries[0].hash, g_tpm->cur_alg) ) -+ &VL_ENTRIES(NUM_VL_ENTRIES).hl.entries[0].hash, tpm->cur_alg) ) - apply_policy(TB_ERR_MODULE_VERIFICATION_FAILED); - - break; - - case TB_EXTPOL_AGILE: -- if ( !g_tpm->hash(g_tpm, 2, buf, size, &VL_ENTRIES(NUM_VL_ENTRIES).hl) ) -+ if ( !tpm_fp->hash(tpm, 2, buf, size, &VL_ENTRIES(NUM_VL_ENTRIES).hl) ) - apply_policy(TB_ERR_MODULE_VERIFICATION_FAILED); - break; - - case TB_EXTPOL_EMBEDDED: - { -- VL_ENTRIES(NUM_VL_ENTRIES).hl.count = g_tpm->alg_count; -- for (int i=0; ialg_count; i++) { -- VL_ENTRIES(NUM_VL_ENTRIES).hl.entries[i].alg = g_tpm->algs[i]; -+ VL_ENTRIES(NUM_VL_ENTRIES).hl.count = tpm->alg_count; -+ for (int i=0; ialg_count; i++) { -+ VL_ENTRIES(NUM_VL_ENTRIES).hl.entries[i].alg = tpm->algs[i]; - if ( !hash_buffer(buf, size, &VL_ENTRIES(NUM_VL_ENTRIES).hl.entries[i].hash, -- g_tpm->algs[i]) ) -+ tpm->algs[i]) ) - return; - } - -@@ -807,6 +818,8 @@ static tb_error_t verify_nvindex(tb_poli - size_t nv_size = sizeof(nv_buf); - tb_hash_t digest; - uint32_t attribute; -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - if ( pol_entry == NULL ) - return TB_ERR_NV_VERIFICATION_FAILED; -@@ -814,7 +827,7 @@ static tb_error_t verify_nvindex(tb_poli - printk(TBOOT_INFO"verifying nv index 0x%08X\n", pol_entry->nv_index); - - /* check nv attribute */ -- if ( !g_tpm->get_nvindex_permission(g_tpm, 0, pol_entry->nv_index, -+ if ( !tpm_fp->get_nvindex_permission(tpm, 0, pol_entry->nv_index, - &attribute) ) { - printk(TBOOT_ERR"\t :reading nv index permission failed\n"); - return TB_ERR_NV_VERIFICATION_FAILED; -Index: tboot-1.9.6/tboot/common/tb_error.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/tb_error.c -+++ tboot-1.9.6/tboot/common/tb_error.c -@@ -135,6 +135,8 @@ void print_tb_error_msg(tb_error_t error - bool read_tb_error_code(tb_error_t *error) - { - uint32_t size = sizeof(tb_error_t); -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - if ( error == NULL ) { - printk(TBOOT_ERR"Error: error pointer is zero.\n"); -@@ -144,9 +146,9 @@ bool read_tb_error_code(tb_error_t *erro - memset(error, 0, size); - - /* read! */ -- if ( !g_tpm->nv_read(g_tpm, 0, g_tpm->tb_err_index, 0, -+ if ( !tpm_fp->nv_read(tpm, 0, tpm->tb_err_index, 0, - (uint8_t *)error, &size) ) { -- printk(TBOOT_WARN"Error: read TPM error: 0x%x.\n", g_tpm->error); -+ printk(TBOOT_WARN"Error: read TPM error: 0x%x.\n", tpm->error); - no_err_idx = true; - return false; - } -@@ -163,12 +165,15 @@ bool read_tb_error_code(tb_error_t *erro - */ - bool write_tb_error_code(tb_error_t error) - { -- if ( !g_tpm || no_err_idx ) -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); -+ -+ if ( !tpm || no_err_idx ) - return false; - -- if ( !g_tpm->nv_write(g_tpm, g_tpm->cur_loc, g_tpm->tb_err_index, 0, -+ if ( !tpm_fp->nv_write(tpm, tpm->cur_loc, tpm->tb_err_index, 0, - (uint8_t *)&error, sizeof(tb_error_t)) ) { -- printk(TBOOT_WARN"Error: write TPM error: 0x%x.\n", g_tpm->error); -+ printk(TBOOT_WARN"Error: write TPM error: 0x%x.\n", tpm->error); - no_err_idx = true; - return false; - } -Index: tboot-1.9.6/tboot/common/tboot.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/tboot.c -+++ tboot-1.9.6/tboot/common/tboot.c -@@ -156,6 +156,8 @@ static void post_launch(void) - { - uint64_t base, size; - tb_error_t err; -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - extern tboot_log_t *g_log; - extern void shutdown_entry(void); - -@@ -228,7 +230,7 @@ static void post_launch(void) - /* - * verify nv indices against policy - */ -- if ( (g_tpm->major == TPM12_VER_MAJOR) && get_tboot_measure_nv() ) -+ if ( (tpm->major == TPM12_VER_MAJOR) && get_tboot_measure_nv() ) - verify_all_nvindices(); - - /* -@@ -238,8 +240,8 @@ static void post_launch(void) - apply_policy(TB_ERR_S3_INTEGRITY); - - -- if ( g_tpm->major == TPM20_VER_MAJOR ) { -- g_tpm->context_save(g_tpm, g_tpm->cur_loc, handle2048, &tpm2_context_saved); -+ if ( tpm->major == TPM20_VER_MAJOR ) { -+ tpm_fp->context_save(tpm, tpm->cur_loc, handle2048, &tpm2_context_saved); - } - - /* -@@ -253,7 +255,7 @@ static void post_launch(void) - _tboot_shared.tboot_base = (uint32_t)&_start; - _tboot_shared.tboot_size = (uint32_t)&_end - (uint32_t)&_start; - uint32_t key_size = sizeof(_tboot_shared.s3_key); -- if ( !g_tpm->get_random(g_tpm, 2, _tboot_shared.s3_key, &key_size) || key_size != sizeof(_tboot_shared.s3_key) ) -+ if ( !tpm_fp->get_random(tpm, 2, _tboot_shared.s3_key, &key_size) || key_size != sizeof(_tboot_shared.s3_key) ) - apply_policy(TB_ERR_S3_INTEGRITY); - _tboot_shared.num_in_wfs = atomic_read(&ap_wfs_count); - if ( use_mwait() ) { -@@ -475,15 +477,15 @@ void begin_launch(void *addr, uint32_t m - - void s3_launch(void) - { -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - /* restore backed-up s3 wakeup page */ - restore_saved_s3_wakeup_page(); -- -- /* load saved tpm2 context for unseal */ -- if ( g_tpm->major == TPM20_VER_MAJOR ) { -- g_tpm->context_flush(g_tpm, g_tpm->cur_loc, handle2048); -- g_tpm->context_load(g_tpm, g_tpm->cur_loc, &tpm2_context_saved, &handle2048); -- } -- -+ /* load saved tpm2 context for unseal */ -+ if ( tpm->major == TPM20_VER_MAJOR ) { -+ tpm_fp->context_flush(tpm, tpm->cur_loc, handle2048); -+ tpm_fp->context_load(tpm, tpm->cur_loc, &tpm2_context_saved, &handle2048); -+ } - - /* remove DMAR table if necessary */ - remove_vtd_dmar_table(); -@@ -560,6 +562,9 @@ static void shutdown_system(uint32_t shu - - void shutdown(void) - { -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); -+ - /* wait-for-sipi only invoked for APs, so skip all BSP shutdown code */ - if ( _tboot_shared.shutdown_type == TB_SHUTDOWN_WFS ) { - atomic_inc(&ap_wfs_count); -@@ -585,24 +590,24 @@ void shutdown(void) - printk(TBOOT_ERR"Release TPM FIFO locality 0 failed \n"); - if (!release_locality(1)) - printk(TBOOT_ERR"Release TPM FIFO locality 1 failed \n"); -- if (!tpm_wait_cmd_ready(g_tpm->cur_loc)) -- printk(TBOOT_ERR"Request TPM FIFO locality %d failed \n", g_tpm->cur_loc); -+ if (!tpm_wait_cmd_ready(tpm->cur_loc)) -+ printk(TBOOT_ERR"Request TPM FIFO locality %d failed \n", tpm->cur_loc); - } - else { - if (!tpm_relinquish_locality_crb(0)) - printk(TBOOT_ERR"Release TPM CRB locality 0 failed \n"); - if (!tpm_relinquish_locality_crb(1)) - printk(TBOOT_ERR"Release TPM CRB locality 1 failed \n"); -- if (!tpm_request_locality_crb(g_tpm->cur_loc)) -- printk(TBOOT_ERR"Request TPM CRB locality %d failed \n", g_tpm->cur_loc); -+ if (!tpm_request_locality_crb(tpm->cur_loc)) -+ printk(TBOOT_ERR"Request TPM CRB locality %d failed \n", tpm->cur_loc); - } - - if ( _tboot_shared.shutdown_type == TB_SHUTDOWN_S3 ) { - /* restore DMAR table if needed */ - restore_vtd_dmar_table(); -- if ( g_tpm->major == TPM20_VER_MAJOR ) { -- g_tpm->context_flush(g_tpm, g_tpm->cur_loc, handle2048); -- g_tpm->context_load(g_tpm, g_tpm->cur_loc, &tpm2_context_saved, &handle2048); -+ if ( tpm->major == TPM20_VER_MAJOR ) { -+ tpm_fp->context_flush(tpm, tpm->cur_loc, handle2048); -+ tpm_fp->context_load(tpm, tpm->cur_loc, &tpm2_context_saved, &handle2048); - } - - -@@ -624,13 +629,13 @@ void shutdown(void) - if ( is_launched() ) { - - /* cap PCRs to ensure no follow-on code can access sealed data */ -- g_tpm->cap_pcrs(g_tpm, g_tpm->cur_loc, -1); -+ tpm_fp->cap_pcrs(tpm, tpm->cur_loc, -1); - - /* have TPM save static PCRs (in case VMM/kernel didn't) */ - /* per TCG spec, TPM can invalidate saved state if any other TPM - operation is performed afterwards--so do this last */ - if ( _tboot_shared.shutdown_type == TB_SHUTDOWN_S3 ) -- g_tpm->save_state(g_tpm, g_tpm->cur_loc); -+ tpm_fp->save_state(tpm, tpm->cur_loc); - - /* scrub any secrets by clearing their memory, then flush cache */ - /* we don't have any secrets to scrub, however */ -Index: tboot-1.9.6/tboot/common/tpm.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/tpm.c -+++ tboot-1.9.6/tboot/common/tpm.c -@@ -45,13 +45,16 @@ - #include - #include - --__data struct tpm_if *g_tpm = NULL; --u16 tboot_alg_list[] = {TB_HALG_SHA1, TB_HALG_SHA256}; -- -- -- -- -+__data uint8_t g_tpm_ver = TPM_VER_UNKNOWN; -+__data struct tpm_if g_tpm = { -+ .cur_loc = 0, -+ .timeout.timeout_a = TIMEOUT_A, -+ .timeout.timeout_b = TIMEOUT_B, -+ .timeout.timeout_c = TIMEOUT_C, -+ .timeout.timeout_d = TIMEOUT_D, -+}; - -+u16 tboot_alg_list[] = {TB_HALG_SHA1, TB_HALG_SHA256}; - - /* Global variables for TPM status register */ - static tpm20_reg_sts_t g_reg_sts, *g_reg_sts_20 = &g_reg_sts; -@@ -70,15 +73,15 @@ typedef union { - } tpm_reg_data_crb_t; - - #define TPM_ACTIVE_LOCALITY_TIME_OUT \ -- (TIMEOUT_UNIT * g_tpm->timeout.timeout_a) /* according to spec */ -+ (TIMEOUT_UNIT *get_tpm()->timeout.timeout_a) /* according to spec */ - #define TPM_CMD_READY_TIME_OUT \ -- (TIMEOUT_UNIT * g_tpm->timeout.timeout_b) /* according to spec */ -+ (TIMEOUT_UNIT *get_tpm()->timeout.timeout_b) /* according to spec */ - #define TPM_CMD_WRITE_TIME_OUT \ -- (TIMEOUT_UNIT * g_tpm->timeout.timeout_d) /* let it long enough */ -+ (TIMEOUT_UNIT *get_tpm()->timeout.timeout_d) /* let it long enough */ - #define TPM_DATA_AVAIL_TIME_OUT \ -- (TIMEOUT_UNIT * g_tpm->timeout.timeout_c) /* let it long enough */ -+ (TIMEOUT_UNIT *get_tpm()->timeout.timeout_c) /* let it long enough */ - #define TPM_RSP_READ_TIME_OUT \ -- (TIMEOUT_UNIT * g_tpm->timeout.timeout_d) /* let it long enough */ -+ (TIMEOUT_UNIT *get_tpm()->timeout.timeout_d) /* let it long enough */ - #define TPM_VALIDATE_LOCALITY_TIME_OUT 0x100 - - #define read_tpm_sts_reg(locality) { \ -@@ -828,6 +831,8 @@ bool tpm_workaround_crb(void) - - bool tpm_detect(void) - { -+ struct tpm_if *tpm; -+ const struct tpm_if_fp *tpm_fp; - if (is_tpm_crb()) { - printk(TBOOT_INFO"TPM: This is Intel PTT, TPM Family 0x%d\n", g_tpm_family); - if (!txt_is_launched()) { -@@ -854,14 +859,17 @@ bool tpm_detect(void) - } - } - else { -- g_tpm = &tpm_12_if; /* Don't leave g_tpm as NULL*/ -+ g_tpm_ver = TPM_VER_12; -+ tpm = get_tpm(); /* Don't leave tpm and tpm_fp as NULL*/ -+ tpm_fp = get_tpm_fp(); -+ - if ( tpm_validate_locality(0) ) printk(TBOOT_INFO"TPM: FIFO_INF Locality 0 is open\n"); - else { - printk(TBOOT_ERR"TPM: FIFO_INF Locality 0 is not open\n"); - return false; - } - /* determine TPM family from command check */ -- if ( g_tpm->check() ) { -+ if ( tpm_fp->check() ) { - g_tpm_family = TPM_IF_12; - printk(TBOOT_INFO"TPM: discrete TPM1.2 Family 0x%d\n", g_tpm_family); - } -@@ -871,21 +879,12 @@ bool tpm_detect(void) - } - } - -- if (g_tpm_family == TPM_IF_12) g_tpm = &tpm_12_if; -- if (g_tpm_family == TPM_IF_20_FIFO) g_tpm = &tpm_20_if; -- if (g_tpm_family == TPM_IF_20_CRB) g_tpm = &tpm_20_if; -- -- /* if (!txt_is_launched()) -- g_tpm->cur_loc = 0; -- else -- g_tpm->cur_loc = 2; -- -- g_tpm->timeout.timeout_a = TIMEOUT_A; -- g_tpm->timeout.timeout_b = TIMEOUT_B; -- g_tpm->timeout.timeout_c = TIMEOUT_C; -- g_tpm->timeout.timeout_d = TIMEOUT_D; --*/ -- return g_tpm->init(g_tpm); -+ if (g_tpm_family == TPM_IF_12) g_tpm_ver = TPM_VER_12; -+ if (g_tpm_family == TPM_IF_20_FIFO) g_tpm_ver = TPM_VER_20; -+ if (g_tpm_family == TPM_IF_20_CRB) g_tpm_ver = TPM_VER_20; -+ -+ tpm_fp = get_tpm_fp(); -+ return tpm_fp->init(tpm); - } - - void tpm_print(struct tpm_if *ti) -@@ -897,8 +896,23 @@ void tpm_print(struct tpm_if *ti) - printk(TBOOT_INFO"\t extend policy: %d\n", ti->extpol); - printk(TBOOT_INFO"\t current alg id: 0x%x\n", ti->cur_alg); - printk(TBOOT_INFO"\t timeout values: A: %u, B: %u, C: %u, D: %u\n", ti->timeout.timeout_a, ti->timeout.timeout_b, ti->timeout.timeout_c, ti->timeout.timeout_d); -+} -+ -+struct tpm_if *get_tpm(void) -+{ -+ return &g_tpm; - } - -+const struct tpm_if_fp *get_tpm_fp(void) -+{ -+ if ( g_tpm_ver == TPM_VER_12 ) -+ return &tpm_12_if_fp; -+ else if ( g_tpm_ver == TPM_VER_20) -+ return &tpm_20_if_fp; -+ -+ return NULL; -+ -+} - /* - * Local variables: - * mode: C -Index: tboot-1.9.6/tboot/common/tpm_12.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/tpm_12.c -+++ tboot-1.9.6/tboot/common/tpm_12.c -@@ -1914,8 +1914,7 @@ static bool tpm12_check(void) - - return ( ret == TPM_BAD_ORDINAL ); - } -- --struct tpm_if tpm_12_if = { -+const struct tpm_if_fp tpm_12_if_fp = { - .init = tpm12_init, - .pcr_read = tpm12_pcr_read, - .pcr_extend = tpm12_pcr_extend, -@@ -1931,11 +1930,6 @@ struct tpm_if tpm_12_if = { - .save_state = tpm12_save_state, - .cap_pcrs = tpm12_cap_pcrs, - .check = tpm12_check, -- .cur_loc = 0, -- .timeout.timeout_a = TIMEOUT_A, -- .timeout.timeout_b = TIMEOUT_B, -- .timeout.timeout_c = TIMEOUT_C, -- .timeout.timeout_d = TIMEOUT_D, - }; - - /* -Index: tboot-1.9.6/tboot/common/tpm_20.c -=================================================================== ---- tboot-1.9.6.orig/tboot/common/tpm_20.c -+++ tboot-1.9.6/tboot/common/tpm_20.c -@@ -2609,7 +2609,7 @@ out: - return true; - } - --struct tpm_if tpm_20_if = { -+const struct tpm_if_fp tpm_20_if_fp = { - .init = tpm20_init, - .pcr_read = tpm20_pcr_read, - .pcr_extend = tpm20_pcr_extend, -Index: tboot-1.9.6/tboot/include/tpm.h -=================================================================== ---- tboot-1.9.6.orig/tboot/include/tpm.h -+++ tboot-1.9.6/tboot/include/tpm.h -@@ -48,6 +48,10 @@ - #define TPM_IF_20_FIFO 1 - #define TPM_IF_20_CRB 2 - -+#define TPM_VER_UNKNOWN 0 -+#define TPM_VER_12 1 -+#define TPM_VER_20 2 -+ - #define TPM_INTERFACE_ID_FIFO_20 0x0 - #define TPM_INTERFACE_ID_CRB 0x1 - #define TPM_INTERFACE_ID_FIFO_13 0xF -@@ -413,6 +417,7 @@ extern tpm_pcr_value_t post_launch_pcr17 - extern tpm_pcr_value_t post_launch_pcr18; - - struct tpm_if; -+struct tpm_if_fp; - - struct tpm_if { - #define TPM12_VER_MAJOR 1 -@@ -447,6 +452,9 @@ struct tpm_if { - u32 tb_policy_index; - u32 tb_err_index; - u32 sgx_svn_index; -+}; -+ -+struct tpm_if_fp { - - bool (*init)(struct tpm_if *ti); - -@@ -483,9 +491,10 @@ struct tpm_if { - bool (*check)(void); - }; - --extern struct tpm_if tpm_12_if; --extern struct tpm_if tpm_20_if; --extern struct tpm_if *g_tpm; -+extern struct tpm_if_data tpm_if_data; -+extern const struct tpm_if_fp tpm_12_if_fp; -+extern const struct tpm_if_fp tpm_20_if_fp; -+extern uint8_t g_tpm_ver; - extern uint8_t g_tpm_family; - - extern bool tpm_validate_locality(uint32_t locality); -@@ -501,6 +510,8 @@ extern bool tpm_request_locality_crb(uin - extern bool tpm_relinquish_locality_crb(uint32_t locality); - extern bool txt_is_launched(void); - extern bool tpm_workaround_crb(void); -+extern struct tpm_if *get_tpm(void); -+extern const struct tpm_if_fp *get_tpm_fp(void); - - - //#define TPM_UNIT_TEST 1 -Index: tboot-1.9.6/tboot/txt/acmod.c -=================================================================== ---- tboot-1.9.6.orig/tboot/txt/acmod.c -+++ tboot-1.9.6/tboot/txt/acmod.c -@@ -834,6 +834,8 @@ bool verify_racm(const acm_hdr_t *acm_hd - #ifndef IS_INCLUDED /* defined in utils/acminfo.c */ - void verify_IA32_se_svn_status(const acm_hdr_t *acm_hdr) - { -+ struct tpm_if *tpm = get_tpm(); -+ const struct tpm_if_fp *tpm_fp = get_tpm_fp(); - - printk(TBOOT_INFO"SGX:verify_IA32_se_svn_status is called\n"); - -@@ -847,8 +849,8 @@ void verify_IA32_se_svn_status(const acm - - if (((rdmsr(MSR_IA32_SE_SVN_STATUS)>>16) & 0xff) != acm_hdr->se_svn) { - printk(TBOOT_INFO"se_svn is not equal to ACM se_svn\n"); -- if (!g_tpm->nv_write(g_tpm, 0, g_tpm->sgx_svn_index, 0, (uint8_t *)&(acm_hdr->se_svn), 1)) -- printk(TBOOT_ERR"Write sgx_svn_index 0x%x failed. \n", g_tpm->sgx_svn_index); -+ if (!tpm_fp->nv_write(tpm, 0, tpm->sgx_svn_index, 0, (uint8_t *)&(acm_hdr->se_svn), 1)) -+ printk(TBOOT_ERR"Write sgx_svn_index 0x%x failed. \n", tpm->sgx_svn_index); - else - printk(TBOOT_INFO"Write sgx_svn_index with 0x%x successful.\n", acm_hdr->se_svn); - -Index: tboot-1.9.6/tboot/txt/heap.c -=================================================================== ---- tboot-1.9.6.orig/tboot/txt/heap.c -+++ tboot-1.9.6/tboot/txt/heap.c -@@ -709,30 +709,31 @@ uint64_t calc_os_sinit_data_size(uint32_ - 2 * sizeof(heap_ext_data_element_t) + - sizeof(heap_event_log_ptr_elt_t) - }; -- txt_caps_t sinit_caps; -+ txt_caps_t sinit_caps; -+ struct tpm_if *tpm = get_tpm(); - -- if ( g_tpm->major == TPM20_VER_MAJOR ) { -- if (g_sinit != NULL) { -- sinit_caps = get_sinit_capabilities(g_sinit); -- } -+ if ( tpm->major == TPM20_VER_MAJOR ) { -+ if (g_sinit != NULL) { -+ sinit_caps = get_sinit_capabilities(g_sinit); -+ } - if (sinit_caps.tcg_event_log_format) { -- size[2] = sizeof(os_sinit_data_t) + sizeof(uint64_t) + -+ size[2] = sizeof(os_sinit_data_t) + sizeof(uint64_t) + - 2 * sizeof(heap_ext_data_element_t) + - sizeof(heap_event_log_ptr_elt2_1_t); - } -- else { -- u32 count; -- if ( g_tpm->extpol == TB_EXTPOL_AGILE ) -- count = g_tpm->banks; -- else -- if ( g_tpm->extpol == TB_EXTPOL_EMBEDDED ) -- count = g_tpm->alg_count; -- else -- count = 1; -- size[2] = sizeof(os_sinit_data_t) + sizeof(uint64_t) + -- 2 * sizeof(heap_ext_data_element_t) + -- 4 + count*sizeof(heap_event_log_descr_t); -- } -+ else { -+ u32 count; -+ if ( tpm->extpol == TB_EXTPOL_AGILE ) -+ count = tpm->banks; -+ else -+ if ( tpm->extpol == TB_EXTPOL_EMBEDDED ) -+ count = tpm->alg_count; -+ else -+ count = 1; -+ size[2] = sizeof(os_sinit_data_t) + sizeof(uint64_t) + -+ 2 * sizeof(heap_ext_data_element_t) + 4 + -+ count*sizeof(heap_event_log_descr_t); -+ } - } - - if ( version >= 6 ) -Index: tboot-1.9.6/tboot/txt/txt.c -=================================================================== ---- tboot-1.9.6.orig/tboot/txt/txt.c -+++ tboot-1.9.6/tboot/txt/txt.c -@@ -247,10 +247,11 @@ static void init_evtlog_desc(heap_event_ - { - unsigned int i; - os_mle_data_t *os_mle_data = get_os_mle_data_start(get_txt_heap()); -- switch (g_tpm->extpol) { -+ struct tpm_if *tpm = get_tpm(); -+ switch (tpm->extpol) { - case TB_EXTPOL_AGILE: - for (i=0; icount; i++) { -- evt_log->event_log_descr[i].alg = g_tpm->algs_banks[i]; -+ evt_log->event_log_descr[i].alg = tpm->algs_banks[i]; - evt_log->event_log_descr[i].phys_addr = - (uint64_t)(unsigned long)(os_mle_data->event_log_buffer + i*4096); - evt_log->event_log_descr[i].size = 4096; -@@ -260,7 +261,7 @@ static void init_evtlog_desc(heap_event_ - break; - case TB_EXTPOL_EMBEDDED: - for (i=0; icount; i++) { -- evt_log->event_log_descr[i].alg = g_tpm->algs[i]; -+ evt_log->event_log_descr[i].alg = tpm->algs[i]; - evt_log->event_log_descr[i].phys_addr = - (uint64_t)(unsigned long)(os_mle_data->event_log_buffer + i*4096); - evt_log->event_log_descr[i].size = 4096; -@@ -269,7 +270,7 @@ static void init_evtlog_desc(heap_event_ - } - break; - case TB_EXTPOL_FIXED: -- evt_log->event_log_descr[0].alg = g_tpm->cur_alg; -+ evt_log->event_log_descr[0].alg = tpm->cur_alg; - evt_log->event_log_descr[0].phys_addr = - (uint64_t)(unsigned long)os_mle_data->event_log_buffer; - evt_log->event_log_descr[0].size = 4096; -@@ -286,15 +287,16 @@ static void init_os_sinit_ext_data(heap_ - heap_ext_data_element_t* elt = elts; - heap_event_log_ptr_elt_t* evt_log; - txt_caps_t sinit_caps; -+ struct tpm_if *tpm = get_tpm(); - -- if ( g_tpm->major == TPM12_VER_MAJOR ) { -+ if ( tpm->major == TPM12_VER_MAJOR ) { - evt_log = (heap_event_log_ptr_elt_t *)elt->data; - evt_log->event_log_phys_addr = (uint64_t)(unsigned long)init_event_log(); - elt->type = HEAP_EXTDATA_TYPE_TPM_EVENT_LOG_PTR; - elt->size = sizeof(*elt) + sizeof(*evt_log); - } - else -- if ( g_tpm->major == TPM20_VER_MAJOR ) { -+ if ( tpm->major == TPM20_VER_MAJOR ) { - if (g_sinit != NULL) { - sinit_caps = get_sinit_capabilities(g_sinit); - } -@@ -311,11 +313,11 @@ static void init_os_sinit_ext_data(heap_ - } - else { - g_elog_2 = (heap_event_log_ptr_elt2_t *)elt->data; -- if ( g_tpm->extpol == TB_EXTPOL_AGILE ) -- g_elog_2->count = g_tpm->banks; -+ if ( tpm->extpol == TB_EXTPOL_AGILE ) -+ g_elog_2->count = tpm->banks; - else -- if ( g_tpm->extpol == TB_EXTPOL_EMBEDDED ) -- g_elog_2->count = g_tpm->alg_count; -+ if ( tpm->extpol == TB_EXTPOL_EMBEDDED ) -+ g_elog_2->count = tpm->alg_count; - else - g_elog_2->count = 1; - init_evtlog_desc(g_elog_2); -@@ -428,7 +430,8 @@ bool evtlog_append_tpm20(uint8_t pcr, ui - - bool evtlog_append(uint8_t pcr, hash_list_t *hl, uint32_t type) - { -- switch (g_tpm->major) { -+ struct tpm_if *tpm = get_tpm(); -+ switch (tpm->major) { - case TPM12_VER_MAJOR: - evtlog_append_tpm12(pcr, &hl->entries[0].hash, type); - break; -@@ -454,6 +457,7 @@ static txt_heap_t *init_txt_heap(void *p - { - txt_heap_t *txt_heap; - uint64_t *size; -+ struct tpm_if *tpm = get_tpm(); - - txt_heap = get_txt_heap(); - -@@ -588,8 +592,8 @@ static txt_heap_t *init_txt_heap(void *p - - /* PCR mapping selection MUST be zero in TPM2.0 mode - * since D/A mapping is the only supported by TPM2.0 */ -- if ( g_tpm->major >= TPM20_VER_MAJOR ) { -- os_sinit_data->flags = (g_tpm->extpol == TB_EXTPOL_AGILE) ? 0 : 1; -+ if ( tpm->major >= TPM20_VER_MAJOR ) { -+ os_sinit_data->flags = (tpm->extpol == TB_EXTPOL_AGILE) ? 0 : 1; - os_sinit_data->capabilities.pcr_map_no_legacy = 0; - os_sinit_data->capabilities.pcr_map_da = 0; - g_using_da = 1; -@@ -779,6 +783,7 @@ bool txt_s3_launch_environment(void) - /* so don't re-create; this is OK because it was untrusted initially */ - /* and would be untrusted now */ - txt_caps_t sinit_caps; -+ struct tpm_if *tpm = get_tpm(); - - /* get sinit binary loaded */ - g_sinit = (acm_hdr_t *)(uint32_t)read_pub_config_reg(TXTCR_SINIT_BASE); -@@ -787,10 +792,10 @@ bool txt_s3_launch_environment(void) - } - /* initialize event log in os_sinit_data, so that events will not */ - /* repeat when s3 */ -- if ( g_tpm->major == TPM12_VER_MAJOR && g_elog ) -+ if ( tpm->major == TPM12_VER_MAJOR && g_elog ) - g_elog = (event_log_container_t *)init_event_log(); - else -- if ( g_tpm->major == TPM20_VER_MAJOR ){ -+ if ( tpm->major == TPM20_VER_MAJOR ){ - sinit_caps = get_sinit_capabilities(g_sinit); - if (sinit_caps.tcg_event_log_format && g_elog_2_1) - init_evtlog_desc_1(g_elog_2_1); diff --git a/tboot-openssl-1-1-0.patch b/tboot-openssl-1-1-0.patch deleted file mode 100644 index d3a0af7..0000000 --- a/tboot-openssl-1-1-0.patch +++ /dev/null @@ -1,32 +0,0 @@ -changeset: 503:2bb331ec268d -user: Ning Sun -date: Mon Aug 28 02:10:28 2017 -0700 -summary: port to openssl-1.1.0 - -diff -r e57efe410a90 -r 2bb331ec268d lcptools/hash.c ---- a/lcptools/hash.c Mon Jul 24 05:34:17 2017 -0700 -+++ b/lcptools/hash.c Mon Aug 28 02:10:28 2017 -0700 -@@ -74,13 +74,18 @@ - return false; - - if ( hash_alg == TB_HALG_SHA1_LG ) { -- EVP_MD_CTX ctx; -+ EVP_MD_CTX *ctx = EVP_MD_CTX_create(); -+ if (ctx == NULL) { -+ fprintf(stderr, "%s(): EVP_MD_CTX_create() failed.\n", __func__); -+ return false; -+ } - const EVP_MD *md; - - md = EVP_sha1(); -- EVP_DigestInit(&ctx, md); -- EVP_DigestUpdate(&ctx, buf, size); -- EVP_DigestFinal(&ctx, hash->sha1, NULL); -+ EVP_DigestInit(ctx, md); -+ EVP_DigestUpdate(ctx, buf, size); -+ EVP_DigestFinal(ctx, hash->sha1, NULL); -+ EVP_MD_CTX_destroy(ctx); - return true; - } - else - diff --git a/tboot-signature-segfault.patch b/tboot-signature-segfault.patch deleted file mode 100644 index 0146634..0000000 --- a/tboot-signature-segfault.patch +++ /dev/null @@ -1,80 +0,0 @@ -changeset: 506:09fae64a7515 -user: Ning Sun -date: Sat Sep 02 01:40:15 2017 -0700 -summary: Fix openssl-1.0.2 double frees - -Index: tboot-1.9.6/lcptools-v2/crtpollist.c -=================================================================== ---- tboot-1.9.6.orig/lcptools-v2/crtpollist.c -+++ tboot-1.9.6/lcptools-v2/crtpollist.c -@@ -160,15 +160,14 @@ static lcp_signature_t2 *read_rsa_pubkey - - memset(sig, 0, sizeof(lcp_rsa_signature_t) + 2*keysize); - sig->rsa_signature.pubkey_size = keysize; -- -- BIGNUM *modulus = BN_new(); -- -+ - /* OpenSSL Version 1.1.0 and later don't allow direct access to RSA - stuct */ - #if OPENSSL_VERSION_NUMBER >= 0x10100000L -+ BIGNUM *modulus = BN_new(); - RSA_get0_key(pubkey, (const BIGNUM **)&modulus, NULL, NULL); - #else -- modulus = pubkey->n; -+ BIGNUM *modulus = BN_dup(pubkey->n); - #endif - - unsigned char key[keysize]; -Index: tboot-1.9.6/lcptools-v2/lcputils.c -=================================================================== ---- tboot-1.9.6.orig/lcptools-v2/lcputils.c -+++ tboot-1.9.6/lcptools-v2/lcputils.c -@@ -384,8 +384,8 @@ bool verify_signature(const uint8_t *dat - #if OPENSSL_VERSION_NUMBER >= 0x10100000L - RSA_set0_key(rsa_pubkey, modulus, exponent, NULL); - #else -- rsa_pubkey->n = modulus; -- rsa_pubkey->e = exponent; -+ rsa_pubkey->n = BN_dup(modulus); -+ rsa_pubkey->e = BN_dup(exponent); - rsa_pubkey->d = rsa_pubkey->p = rsa_pubkey->q = NULL; - #endif - -Index: tboot-1.9.6/lcptools/crtpollist.c -=================================================================== ---- tboot-1.9.6.orig/lcptools/crtpollist.c -+++ tboot-1.9.6/lcptools/crtpollist.c -@@ -155,14 +155,14 @@ static lcp_signature_t *read_pubkey_file - - memset(sig, 0, sizeof(*sig) + 2*keysize); - sig->pubkey_size = keysize; -- -- BIGNUM *modulus = BN_new(); -+ - /* OpenSSL Version 1.1.0 and later don't allow direct access to RSA - stuct */ - #if OPENSSL_VERSION_NUMBER >= 0x10100000L -+ BIGNUM *modulus = BN_new(); - RSA_get0_key(pubkey, (const BIGNUM **)&modulus, NULL, NULL); - #else -- modulus = pubkey->n; -+ BIGNUM *modulus = BN_dup(pubkey->n); - #endif - unsigned char key[keysize]; - BN_bn2bin(modulus, key); -Index: tboot-1.9.6/lcptools/lcputils2.c -=================================================================== ---- tboot-1.9.6.orig/lcptools/lcputils2.c -+++ tboot-1.9.6/lcptools/lcputils2.c -@@ -288,8 +288,8 @@ bool verify_signature(const uint8_t *dat - #if OPENSSL_VERSION_NUMBER >= 0x10100000L - RSA_set0_key(rsa_pubkey, modulus, exponent, NULL); - #else -- rsa_pubkey->n = modulus; -- rsa_pubkey->e = exponent; -+ rsa_pubkey->n = BN_dup(modulus); -+ rsa_pubkey->e = BN_dup(exponent); - rsa_pubkey->d = rsa_pubkey->p = rsa_pubkey->q = NULL; - #endif - diff --git a/tboot-ssl-broken.patch b/tboot-ssl-broken.patch deleted file mode 100644 index 58a6fd9..0000000 --- a/tboot-ssl-broken.patch +++ /dev/null @@ -1,268 +0,0 @@ -Index: tboot-1.9.6/lcptools-v2/crtpollist.c -=================================================================== ---- tboot-1.9.6.orig/lcptools-v2/crtpollist.c -+++ tboot-1.9.6/lcptools-v2/crtpollist.c -@@ -132,6 +132,7 @@ static lcp_signature_t2 *read_rsa_pubkey - if ( fp == NULL ) { - ERROR("Error: failed to open .pem file %s: %s\n", file, - strerror(errno)); -+ fclose(fp); - return NULL; - } - -@@ -141,6 +142,7 @@ static lcp_signature_t2 *read_rsa_pubkey - ERROR("Error: failed to read .pem file %s: %s\n", file, - ERR_error_string(ERR_get_error(), NULL)); - ERR_free_strings(); -+ fclose(fp); - return NULL; - } - -@@ -148,6 +150,7 @@ static lcp_signature_t2 *read_rsa_pubkey - if ( keysize == 0 ) { - ERROR("Error: public key size is 0\n"); - RSA_free(pubkey); -+ fclose(fp); - return NULL; - } - -@@ -155,19 +158,20 @@ static lcp_signature_t2 *read_rsa_pubkey - if ( sig == NULL ) { - ERROR("Error: failed to allocate sig\n"); - RSA_free(pubkey); -+ fclose(fp); - return NULL; - } - - memset(sig, 0, sizeof(lcp_rsa_signature_t) + 2*keysize); - sig->rsa_signature.pubkey_size = keysize; - -+ const BIGNUM *modulus = NULL; - /* OpenSSL Version 1.1.0 and later don't allow direct access to RSA - stuct */ - #if OPENSSL_VERSION_NUMBER >= 0x10100000L -- BIGNUM *modulus = BN_new(); -- RSA_get0_key(pubkey, (const BIGNUM **)&modulus, NULL, NULL); -+ RSA_get0_key(pubkey, &modulus, NULL, NULL); - #else -- BIGNUM *modulus = BN_dup(pubkey->n); -+ modulus = pubkey->n; - #endif - - unsigned char key[keysize]; -@@ -183,8 +187,8 @@ static lcp_signature_t2 *read_rsa_pubkey - } - - LOG("read rsa pubkey succeed!\n"); -- BN_free(modulus); - RSA_free(pubkey); -+ fclose(fp); - return sig; - } - -@@ -386,13 +390,13 @@ static bool ecdsa_sign_tpm20_list_data(l - return false; - } - -- BIGNUM *r = BN_new(); -- BIGNUM *s = BN_new(); -- -+ const BIGNUM *r = NULL; -+ const BIGNUM *s = NULL; -+ - /* OpenSSL Version 1.1.0 and later don't allow direct access to - ECDSA_SIG stuct */ - #if OPENSSL_VERSION_NUMBER >= 0x10100000L -- ECDSA_SIG_get0(ecdsasig, (const BIGNUM **)&r, (const BIGNUM **)&s); -+ ECDSA_SIG_get0(ecdsasig, &r, &s); - #else - r = ecdsasig->r; - s = ecdsasig->s; -@@ -415,8 +419,7 @@ static bool ecdsa_sign_tpm20_list_data(l - display_tpm20_signature(" ", sig, pollist->sig_alg, false); - } - -- BN_free(r); -- BN_free(s); -+ ECDSA_SIG_free(ecdsasig); - return true; - } - return false; -Index: tboot-1.9.6/lcptools-v2/lcputils.c -=================================================================== ---- tboot-1.9.6.orig/lcptools-v2/lcputils.c -+++ tboot-1.9.6/lcptools-v2/lcputils.c -@@ -371,9 +371,8 @@ bool verify_signature(const uint8_t *dat - return false; - } - -- BIGNUM *modulus = BN_new(); -+ BIGNUM *modulus = BN_bin2bn(key, pubkey_size, NULL); - BIGNUM *exponent = BN_new(); -- modulus = BN_bin2bn(key, pubkey_size, NULL); - - /* uses fixed exponent (LCP_SIG_EXPONENT) */ - char exp[32]; -@@ -384,8 +383,8 @@ bool verify_signature(const uint8_t *dat - #if OPENSSL_VERSION_NUMBER >= 0x10100000L - RSA_set0_key(rsa_pubkey, modulus, exponent, NULL); - #else -- rsa_pubkey->n = BN_dup(modulus); -- rsa_pubkey->e = BN_dup(exponent); -+ rsa_pubkey->n = modulus; -+ rsa_pubkey->e = exponent; - rsa_pubkey->d = rsa_pubkey->p = rsa_pubkey->q = NULL; - #endif - -@@ -407,8 +406,6 @@ bool verify_signature(const uint8_t *dat - tb_hash_t digest; - if ( !hash_buffer(data, data_size, &digest, hashalg) ) { - ERROR("Error: failed to hash list\n"); -- BN_free(modulus); -- BN_free(exponent); - RSA_free(rsa_pubkey); - return false; - } -@@ -451,8 +448,6 @@ bool verify_signature(const uint8_t *dat - ERROR("Error: failed to verify list: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - ERR_free_strings(); -- BN_free(modulus); -- BN_free(exponent); - RSA_free(rsa_pubkey); - return false; - } -@@ -467,8 +462,6 @@ bool verify_signature(const uint8_t *dat - ERROR("Error: failed to verify list: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - ERR_free_strings(); -- BN_free(modulus); -- BN_free(exponent); - RSA_free(rsa_pubkey); - return false; - } -@@ -483,8 +476,6 @@ bool verify_signature(const uint8_t *dat - ERROR("Error: failed to verify list: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - ERR_free_strings(); -- BN_free(modulus); -- BN_free(exponent); - RSA_free(rsa_pubkey); - return false; - } -@@ -499,8 +490,6 @@ bool verify_signature(const uint8_t *dat - ERROR("Error: failed to verify list: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - ERR_free_strings(); -- BN_free(modulus); -- BN_free(exponent); - RSA_free(rsa_pubkey); - return false; - } -@@ -508,13 +497,10 @@ bool verify_signature(const uint8_t *dat - - default : - LOG("unknown hash alg\n"); -- BN_free(modulus); -- BN_free(exponent); -+ RSA_free(rsa_pubkey); - return false; - } - -- BN_free(modulus); -- BN_free(exponent); - RSA_free(rsa_pubkey); - return true; - } -Index: tboot-1.9.6/lcptools/crtpollist.c -=================================================================== ---- tboot-1.9.6.orig/lcptools/crtpollist.c -+++ tboot-1.9.6/lcptools/crtpollist.c -@@ -156,13 +156,14 @@ static lcp_signature_t *read_pubkey_file - memset(sig, 0, sizeof(*sig) + 2*keysize); - sig->pubkey_size = keysize; - -+ const BIGNUM *modulus = NULL; -+ - /* OpenSSL Version 1.1.0 and later don't allow direct access to RSA - stuct */ - #if OPENSSL_VERSION_NUMBER >= 0x10100000L -- BIGNUM *modulus = BN_new(); -- RSA_get0_key(pubkey, (const BIGNUM **)&modulus, NULL, NULL); -+ RSA_get0_key(pubkey, &modulus, NULL, NULL); - #else -- BIGNUM *modulus = BN_dup(pubkey->n); -+ modulus = pubkey->n; - #endif - unsigned char key[keysize]; - BN_bn2bin(modulus, key); -@@ -175,8 +176,7 @@ static lcp_signature_t *read_pubkey_file - LOG("signature:\n"); - display_signature(" ", sig, false); - } -- -- BN_free(modulus); -+ - RSA_free(pubkey); - return sig; - } -Index: tboot-1.9.6/lcptools/lcputils2.c -=================================================================== ---- tboot-1.9.6.orig/lcptools/lcputils2.c -+++ tboot-1.9.6/lcptools/lcputils2.c -@@ -274,31 +274,29 @@ bool verify_signature(const uint8_t *dat - ERROR("Error: failed to allocate key\n"); - return false; - } -- BIGNUM *modulus = BN_new(); -+ -+ BIGNUM *modulus = BN_bin2bn(key, pubkey_size, NULL); - BIGNUM *exponent = BN_new(); -- modulus = BN_bin2bn(key, pubkey_size, NULL); - - /* uses fixed exponent (LCP_SIG_EXPONENT) */ - char exp[32]; - snprintf(exp, sizeof(exp), "%u", LCP_SIG_EXPONENT); - BN_dec2bn(&exponent, exp); -- -+ - /* OpenSSL Version 1.1.0 and later don't allow direct access to RSA - stuct */ - #if OPENSSL_VERSION_NUMBER >= 0x10100000L -- RSA_set0_key(rsa_pubkey, modulus, exponent, NULL); -+ RSA_set0_key(rsa_pubkey, modulus, exponent, NULL); - #else -- rsa_pubkey->n = BN_dup(modulus); -- rsa_pubkey->e = BN_dup(exponent); -- rsa_pubkey->d = rsa_pubkey->p = rsa_pubkey->q = NULL; -+ rsa_pubkey->n = modulus; -+ rsa_pubkey->e = exponent; -+ rsa_pubkey->d = rsa_pubkey->p = rsa_pubkey->q = NULL; - #endif - - /* first create digest of data */ - tb_hash_t digest; - if ( !hash_buffer(data, data_size, &digest, TB_HALG_SHA1_LG) ) { - ERROR("Error: failed to hash list\n"); -- BN_free(modulus); -- BN_free(exponent); - RSA_free(rsa_pubkey); - return false; - } -@@ -339,14 +337,10 @@ bool verify_signature(const uint8_t *dat - ERROR("Error: failed to verify list: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - ERR_free_strings(); -- BN_free(modulus); -- BN_free(exponent); -- RSA_free(rsa_pubkey); -+ RSA_free(rsa_pubkey); - return false; - } -- -- BN_free(modulus); -- BN_free(exponent); -+ - RSA_free(rsa_pubkey); - return true; - } diff --git a/tboot.changes b/tboot.changes index 02bd42a..34eaaa6 100644 --- a/tboot.changes +++ b/tboot.changes @@ -1,3 +1,34 @@ +------------------------------------------------------------------- +Fri Aug 31 14:23:48 UTC 2018 - matthias.gerstner@suse.com + +- update to upstream version 1.9.7. This in mainly a bugfix release: + Fix a lot of issues in tools reported by klocwork scan. + Fix a lot of issues in tboot module reported by klocwork scan. + Remove a redundant tboot option + Fix indent in heap.c + Fix 4 issues along with extpol=agile option + Mitigations for tpm interposer attacks + Add an option in tboot to force SINIT to use the legacy TPM2 log format. + Add support for appending to a TPM2 TCG style event log. + Ensure tboot log is available even when measured launch is skipped. + Add centos7 instructions for Use in EFI boot mode. + Fix memory leak and invalid reads and writes issues. + Fix TPM 1.2 locality selection issue. + Fix a null pointer dereference bug when Intel TXT is disabled. + Optimize tboot docs installation. + Fix security vulnerabilities rooted in tpm_if structure and g_tpm variable. + The size field of the MB2 tag is the size of the tag header + the size + Fix openssl-1.0.2 double frees + Make policy element stm_elt use unique type name + lcptools-v2 utilities fixes + port to openssl-1.1.0 + Reset debug PCR16 to zero. + Fix a logical error in function bool evtlog_append(...). +- removed tboot-CVE-2017-16837.patch: now contained in tarball +- removed tboot-openssl-1-1-0.patch: now contained in tarball +- removed tboot-signature-segfault.patch: now contained in tarball +- removed tboot-ssl-broken.patch: now contained in tarball + ------------------------------------------------------------------- Thu Mar 15 09:49:03 UTC 2018 - matthias.gerstner@suse.com diff --git a/tboot.spec b/tboot.spec index 115939d..0192208 100644 --- a/tboot.spec +++ b/tboot.spec @@ -17,8 +17,8 @@ Name: tboot -%define ver 1.9.6 -Version: 20170711_1.9.6 +%define ver 1.9.7 +Version: 20170711_%{ver} Release: 0 Summary: Performs a verified launch using Intel(R) TXT License: BSD-3-Clause @@ -27,15 +27,7 @@ Url: http://sourceforge.net/projects/tboot/ Source0: http://downloads.sourceforge.net/project/tboot/tboot/tboot-%{ver}.tar.gz Patch3: tboot-grub2-fix-menu-in-xen-host-server.patch Patch4: tboot-grub2-fix-xen-submenu-name.patch -Patch5: tboot-openssl-1-1-0.patch -Patch6: tboot-CVE-2017-16837.patch Patch7: tboot-distributor.patch -# a stark history regarding SSL: ssl functions never really worked in tboot, -# even the signature-segfault upstream fix didn't fix the root causes. -# ssl-broken.patch is my own patch that I have published on the tboot-devel -# mailing list, but no response so far. -Patch8: tboot-signature-segfault.patch -Patch9: tboot-ssl-broken.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build ExclusiveArch: %{ix86} x86_64 BuildRequires: openssl-devel @@ -60,11 +52,7 @@ verified launch of an OS kernel/VMM. %setup -q -n %name-%ver %patch3 -p1 %patch4 -p1 -%patch5 -p1 -%patch6 -p1 %patch7 -p1 -%patch8 -p1 -%patch9 -p1 %build export CFLAGS="%{optflags}"