Nico Huber has submitted this change. ( https://review.coreboot.org/c/flashrom/+/33516 )
Change subject: layout: Add `capacity` field ......................................................................
layout: Add `capacity` field
Use it to keep track of the size of the `entries` array. An interim solution until we have dynamic allocation.
Change-Id: Ib5f431bc0a72a79a53fa1376c3417942b19dd3a0 Signed-off-by: Nico Huber nico.h@gmx.de Reviewed-on: https://review.coreboot.org/c/flashrom/+/33516 Reviewed-by: Angel Pons th3fanbus@gmail.com Reviewed-by: Anastasia Klimchuk aklm@chromium.org Reviewed-by: Peter Marheine pmarheine@chromium.org Reviewed-by: Edward O'Callaghan quasisec@chromium.org Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M flashrom.c M ich_descriptors.c M layout.c M layout.h M libflashrom.c 5 files changed, 9 insertions(+), 5 deletions(-)
Approvals: build bot (Jenkins): Verified Angel Pons: Looks good to me, approved Edward O'Callaghan: Looks good to me, approved Peter Marheine: Looks good to me, but someone else must approve Anastasia Klimchuk: Looks good to me, approved
diff --git a/flashrom.c b/flashrom.c index 90e1864..8d260cb 100644 --- a/flashrom.c +++ b/flashrom.c @@ -825,6 +825,7 @@ /* Fill fallback layout covering the whole chip. */ struct single_layout *const fallback = &flash->fallback_layout; fallback->base.entries = &fallback->entry; + fallback->base.capacity = 1; fallback->base.num_entries = 1; fallback->entry.start = 0; fallback->entry.end = flash->chip->total_size * 1024 - 1; diff --git a/ich_descriptors.c b/ich_descriptors.c index 4ae3a1b..143e392 100644 --- a/ich_descriptors.c +++ b/ich_descriptors.c @@ -1295,6 +1295,7 @@ ++j; } layout->base.entries = layout->entries; + layout->base.capacity = ARRAY_SIZE(layout->entries); layout->base.num_entries = j; return 0; } diff --git a/layout.c b/layout.c index 2446e8f..0771d42 100644 --- a/layout.c +++ b/layout.c @@ -26,7 +26,7 @@ #include "layout.h"
static struct romentry entries[MAX_ROMLAYOUT]; -static struct flashrom_layout global_layout = { entries, 0 }; +static struct flashrom_layout global_layout = { entries, MAX_ROMLAYOUT, 0 };
struct flashrom_layout *get_global_layout(void) { @@ -87,9 +87,9 @@ while (!feof(romlayout)) { char *tstr1, *tstr2;
- if (layout->num_entries >= MAX_ROMLAYOUT) { - msg_gerr("Maximum number of ROM images (%i) in layout " - "file reached.\n", MAX_ROMLAYOUT); + if (layout->num_entries >= layout->capacity) { + msg_gerr("Maximum number of ROM images (%zu) in layout " + "file reached.\n", layout->capacity); goto _close_ret; } if (2 != fscanf(romlayout, "%255s %255s\n", tempstr, tempname)) diff --git a/layout.h b/layout.h index d60c89e..2a0f869 100644 --- a/layout.h +++ b/layout.h @@ -46,6 +46,8 @@ struct flashrom_layout { /* entries store the entries specified in a layout file and associated run-time data */ struct romentry *entries; + /* the maximum number of entries */ + size_t capacity; /* the number of successfully parsed entries */ size_t num_entries; }; diff --git a/libflashrom.c b/libflashrom.c index c6a598b..2a39a80 100644 --- a/libflashrom.c +++ b/libflashrom.c @@ -506,7 +506,7 @@ if (!fmap || !l) return 1;
- if (l->num_entries + fmap->nareas > MAX_ROMLAYOUT) { + if (l->num_entries + fmap->nareas > l->capacity) { msg_gerr("Cannot add fmap entries to layout - Too many entries.\n"); return 1; }