[coreboot-gerrit] Change in ...coreboot[master]: Fix coreboot table record alignment to 8-byte boundary
Xiang Wang (Code Review)
gerrit at coreboot.org
Thu Nov 29 09:00:33 CET 2018
Xiang Wang has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/29916
Change subject: Fix coreboot table record alignment to 8-byte boundary
......................................................................
Fix coreboot table record alignment to 8-byte boundary
I found that I triggered an unaligned memory access exception when
debugging riscv's coreboot code. Because some records are aligned
to a 4-byte boundary, such as lb_timestamp. It is defined as follows
struct lb_timestamp {
uint32_t tag;
uint32_t size;
uint32_t timestamp;
};
This may causes data misaligned access exceptions at 64bit machine.
Change-Id: I1846be0e26ab3c81858d8cf727517e1462035e64
Signed-off-by: Xiang Wang <wxjstz at 126.com>
---
M src/lib/coreboot_table.c
1 file changed, 6 insertions(+), 4 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/16/29916/1
diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c
index c2ae094..20f9aae 100644
--- a/src/lib/coreboot_table.c
+++ b/src/lib/coreboot_table.c
@@ -84,8 +84,10 @@
{
struct lb_record *rec;
rec = lb_last_record(header);
- if (header->table_entries)
+ if (header->table_entries) {
+ rec->size = ALIGN_UP(rec->size, 8);
header->table_bytes += rec->size;
+ }
rec = lb_last_record(header);
header->table_entries++;
rec->tag = LB_TAG_UNUSED;
@@ -358,9 +360,9 @@
mainboard = (struct lb_mainboard *)rec;
mainboard->tag = LB_TAG_MAINBOARD;
- mainboard->size = ALIGN_UP(sizeof(*mainboard) +
+ mainboard->size = sizeof(*mainboard) +
strlen(mainboard_vendor) + 1 +
- strlen(mainboard_part_number) + 1, 8);
+ strlen(mainboard_part_number) + 1;
mainboard->vendor_idx = 0;
mainboard->part_number_idx = strlen(mainboard_vendor) + 1;
@@ -411,7 +413,7 @@
rec = (struct lb_string *)lb_new_record(header);
len = strlen(strings[i].string);
rec->tag = strings[i].tag;
- rec->size = ALIGN_UP(sizeof(*rec) + len + 1, 8);
+ rec->size = sizeof(*rec) + len + 1;
memcpy(rec->string, strings[i].string, len+1);
}
--
To view, visit https://review.coreboot.org/c/coreboot/+/29916
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I1846be0e26ab3c81858d8cf727517e1462035e64
Gerrit-Change-Number: 29916
Gerrit-PatchSet: 1
Gerrit-Owner: Xiang Wang <wxjstz at 126.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20181129/5c379c82/attachment.html>
More information about the coreboot-gerrit
mailing list