Jakub Czapiga has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/69761 )
Change subject: vboot/vboot_common: Fix vboot_save_data() code exclusion guard ......................................................................
vboot/vboot_common: Fix vboot_save_data() code exclusion guard
Compilers are not optimizing-out code correctly. This patch fixes incorrect behavior by spliting if statement and extracting code to another function, this allowing for better code size optimization and reduction of undefined references.
Signed-off-by: Jakub Czapiga jacz@semihalf.com Change-Id: Ia5330efeeb4cfd7477cf8f7f64c6abed68281e30 --- M src/security/vboot/vboot_common.c 1 file changed, 32 insertions(+), 10 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/61/69761/1
diff --git a/src/security/vboot/vboot_common.c b/src/security/vboot/vboot_common.c index dd611d1..3c4957a 100644 --- a/src/security/vboot/vboot_common.c +++ b/src/security/vboot/vboot_common.c @@ -9,26 +9,33 @@
#include "antirollback.h"
-void vboot_save_data(struct vb2_context *ctx) +static void save_secdata(struct vb2_context *ctx) { - if (!verification_should_run() && !(ENV_ROMSTAGE && CONFIG(VBOOT_EARLY_EC_SYNC)) - && (ctx->flags - & (VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED | VB2_CONTEXT_SECDATA_KERNEL_CHANGED))) - die("TPM writeback in " ENV_STRING "?"); - - if (ctx->flags & VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED && - (CONFIG(VBOOT_MOCK_SECDATA) || tlcl_lib_init() == VB2_SUCCESS)) { + if (ctx->flags & VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED + && (CONFIG(VBOOT_MOCK_SECDATA) || tlcl_lib_init() == VB2_SUCCESS)) { printk(BIOS_INFO, "Saving secdata firmware\n"); antirollback_write_space_firmware(ctx); ctx->flags &= ~VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED; }
- if (ctx->flags & VB2_CONTEXT_SECDATA_KERNEL_CHANGED && - (CONFIG(VBOOT_MOCK_SECDATA) || tlcl_lib_init() == VB2_SUCCESS)) { + if (ctx->flags & VB2_CONTEXT_SECDATA_KERNEL_CHANGED + && (CONFIG(VBOOT_MOCK_SECDATA) || tlcl_lib_init() == VB2_SUCCESS)) { printk(BIOS_INFO, "Saving secdata kernel\n"); antirollback_write_space_kernel(ctx); ctx->flags &= ~VB2_CONTEXT_SECDATA_KERNEL_CHANGED; } +} + +void vboot_save_data(struct vb2_context *ctx) +{ + if (!verification_should_run() && !(ENV_ROMSTAGE && CONFIG(VBOOT_EARLY_EC_SYNC))) { + if (ctx->flags + & (VB2_CONTEXT_SECDATA_FIRMWARE_CHANGED + | VB2_CONTEXT_SECDATA_KERNEL_CHANGED)) + die("TPM writeback in " ENV_STRING "?"); + } else { + save_secdata(ctx); + }
if (ctx->flags & VB2_CONTEXT_NVDATA_CHANGED) { printk(BIOS_INFO, "Saving nvdata\n");