diff options
5 files changed, 13 insertions, 7 deletions
diff --git a/src/vendorcode/google/chromeos/vboot2/common.c b/src/vendorcode/google/chromeos/vboot2/common.c index 178e8b53f1..caed89fbdf 100644 --- a/src/vendorcode/google/chromeos/vboot2/common.c +++ b/src/vendorcode/google/chromeos/vboot2/common.c @@ -63,6 +63,11 @@ struct vb2_working_data * const vboot_get_working_data(void) return (struct vb2_working_data *)_vboot2_work; } +void *vboot_get_work_buffer(struct vb2_working_data *wd) +{ + return (void *)((uintptr_t)wd + wd->buffer_offset); +} + void vboot_reboot(void) { hard_reset(); diff --git a/src/vendorcode/google/chromeos/vboot2/misc.h b/src/vendorcode/google/chromeos/vboot2/misc.h index cae302bc1f..b97be49a31 100644 --- a/src/vendorcode/google/chromeos/vboot2/misc.h +++ b/src/vendorcode/google/chromeos/vboot2/misc.h @@ -39,11 +39,13 @@ void vboot_reboot(void); struct vb2_working_data { uint32_t selected_region_offset; uint32_t selected_region_size; - uint64_t buffer_size; - uint64_t buffer; + /* offset of the buffer from the start of this struct */ + uint32_t buffer_offset; + uint32_t buffer_size; }; struct vb2_working_data * const vboot_get_working_data(void); +void *vboot_get_work_buffer(struct vb2_working_data *wd); static inline void vb2_get_selected_region(struct vb2_working_data *wd, struct vboot_region *region) diff --git a/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c b/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c index 33ff79a4c2..5df0d4a3bd 100644 --- a/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c +++ b/src/vendorcode/google/chromeos/vboot2/vboot_handoff.c @@ -152,7 +152,7 @@ void *vboot2_load_ramstage(void) struct vboot_region fw_main; struct vb2_working_data *wd = vboot_get_working_data(); - sd = (struct vb2_shared_data *)(uintptr_t)wd->buffer; + sd = vboot_get_work_buffer(wd); sd->workbuf_hash_offset = 0; sd->workbuf_hash_size = 0; diff --git a/src/vendorcode/google/chromeos/vboot2/verstage.c b/src/vendorcode/google/chromeos/vboot2/verstage.c index 42b02564eb..88c18f6de3 100644 --- a/src/vendorcode/google/chromeos/vboot2/verstage.c +++ b/src/vendorcode/google/chromeos/vboot2/verstage.c @@ -179,7 +179,7 @@ void verstage_main(void) /* Set up context and work buffer */ memset(&ctx, 0, sizeof(ctx)); - ctx.workbuf = (uint8_t *)(uintptr_t)wd->buffer; + ctx.workbuf = vboot_get_work_buffer(wd); ctx.workbuf_size = wd->buffer_size; /* Read nvdata from a non-volatile storage */ diff --git a/src/vendorcode/google/chromeos/vboot2/verstub.c b/src/vendorcode/google/chromeos/vboot2/verstub.c index e8faa071c5..8f2e9b2d49 100644 --- a/src/vendorcode/google/chromeos/vboot2/verstub.c +++ b/src/vendorcode/google/chromeos/vboot2/verstub.c @@ -32,9 +32,8 @@ static struct vb2_working_data *init_vb2_working_data(void) wd = vboot_get_working_data(); memset(wd, 0, _vboot2_work_size); /* 8-byte alignment for ARMv7 */ - wd->buffer = ALIGN_UP((uintptr_t)&wd[1], 8); - wd->buffer_size = _vboot2_work_size + (uintptr_t)wd - - (uintptr_t)wd->buffer; + wd->buffer_offset = ALIGN_UP(sizeof(*wd), 8); + wd->buffer_size = _vboot2_work_size - wd->buffer_offset; return wd; } |