Message ID | 20240201002022.11258-4-heinrich.schuchardt@canonical.com |
---|---|
State | Accepted, archived |
Commit | 406c410ef747d66e16f2f5494cbf88ba1307224f |
Delegated to: | Tom Rini |
Headers | show |
Series | smbios: correct handling of table size | expand |
On Thu, 1 Feb 2024 at 02:20, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> wrote: > > In the SMBIOS 3 entry point the Structure Table Maximum Size field was > incorrectly named max_struct_size. A Maximum Structure Size field only > exists in the SMBIOS 2.1 entry point and has a different meaning. > > Call the Structure Table Length field table_maximum_size. > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > cmd/smbios.c | 2 +- > drivers/misc/qfw_smbios.c | 2 +- > include/smbios.h | 2 +- > lib/efi_loader/efi_tcg2.c | 4 ++-- > lib/efi_loader/smbiosdump.c | 6 +++--- > lib/smbios-parser.c | 2 +- > lib/smbios.c | 2 +- > 7 files changed, 10 insertions(+), 10 deletions(-) > > diff --git a/cmd/smbios.c b/cmd/smbios.c > index e2d82be163..66f6b76137 100644 > --- a/cmd/smbios.c > +++ b/cmd/smbios.c > @@ -142,7 +142,7 @@ static int do_smbios(struct cmd_tbl *cmdtp, int flag, int argc, > entry3->major_ver, entry3->minor_ver, entry3->doc_rev); > table = (void *)(uintptr_t)entry3->struct_table_address; > size = entry3->length; > - table_maximum_size = entry3->max_struct_size; > + table_maximum_size = entry3->table_maximum_size; > } else if (!memcmp(entry, smbios_sig, sizeof(smbios_sig) - 1)) { > struct smbios_entry *entry2 = entry; > > diff --git a/drivers/misc/qfw_smbios.c b/drivers/misc/qfw_smbios.c > index a898cb4eea..c3e8c310d0 100644 > --- a/drivers/misc/qfw_smbios.c > +++ b/drivers/misc/qfw_smbios.c > @@ -90,7 +90,7 @@ static int qfw_parse_smbios_anchor(struct udevice *dev, > entry->length = sizeof(struct smbios3_entry); > entry->major_ver = entry2->major_ver; > entry->minor_ver = entry2->minor_ver; > - entry->max_struct_size = entry2->struct_table_length; > + entry->table_maximum_size = entry2->struct_table_length; > } else { > ret = -ENOENT; > goto out; > diff --git a/include/smbios.h b/include/smbios.h > index e2b7f69584..3df8827b60 100644 > --- a/include/smbios.h > +++ b/include/smbios.h > @@ -75,7 +75,7 @@ struct __packed smbios3_entry { > /** @reserved: reserved */ > u8 reserved; > /** maximum size of SMBIOS table */ > - u32 max_struct_size; > + u32 table_maximum_size; > /** @struct_table_address: 64-bit physical starting address */ > u64 struct_table_address; > }; > diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c > index b5d4aa7be5..b07e0099c2 100644 > --- a/lib/efi_loader/efi_tcg2.c > +++ b/lib/efi_loader/efi_tcg2.c > @@ -1098,7 +1098,7 @@ tcg2_measure_smbios(struct udevice *dev, > */ > event_size = sizeof(struct smbios_handoff_table_pointers2) + > FIELD_SIZEOF(struct efi_configuration_table, guid) + > - entry->max_struct_size; > + entry->table_maximum_size; > event = calloc(1, event_size); > if (!event) { > ret = EFI_OUT_OF_RESOURCES; > @@ -1113,7 +1113,7 @@ tcg2_measure_smbios(struct udevice *dev, > smbios_copy = (struct smbios_header *)((uintptr_t)&event->table_entry[0].table); > memcpy(&event->table_entry[0].table, > (void *)((uintptr_t)entry->struct_table_address), > - entry->max_struct_size); > + entry->table_maximum_size); > > smbios_prepare_measurement(entry, smbios_copy); > > diff --git a/lib/efi_loader/smbiosdump.c b/lib/efi_loader/smbiosdump.c > index f0b901897e..2f0b91a353 100644 > --- a/lib/efi_loader/smbiosdump.c > +++ b/lib/efi_loader/smbiosdump.c > @@ -329,7 +329,7 @@ efi_status_t do_check(void) > return EFI_LOAD_ERROR; > } > table = (void *)(uintptr_t)smbios3_anchor->struct_table_address; > - len = smbios3_anchor->max_struct_size; > + len = smbios3_anchor->table_maximum_size; > } else { > struct smbios_entry *smbios_anchor; > int r; > @@ -469,7 +469,7 @@ static efi_status_t do_save(u16 *filename) > > smbios3_anchor = get_config_table(&smbios3_guid); > if (smbios3_anchor) { > - size = 0x20 + smbios3_anchor->max_struct_size; > + size = 0x20 + smbios3_anchor->table_maximum_size; > ret = bs->allocate_pool(EFI_LOADER_DATA, size, (void **)&buf); > if (ret != EFI_SUCCESS) { > error(u"Out of memory\n"); > @@ -480,7 +480,7 @@ static efi_status_t do_save(u16 *filename) > memcpy(buf, smbios3_anchor, smbios3_anchor->length); > memcpy(buf + 0x20, > (void *)(uintptr_t)smbios3_anchor->struct_table_address, > - smbios3_anchor->max_struct_size); > + smbios3_anchor->table_maximum_size); > > smbios3_anchor = (struct smbios3_entry *)buf; > smbios3_anchor->struct_table_address = 0x20; > diff --git a/lib/smbios-parser.c b/lib/smbios-parser.c > index 0d1ac781b3..9a62b3c760 100644 > --- a/lib/smbios-parser.c > +++ b/lib/smbios-parser.c > @@ -230,7 +230,7 @@ void smbios_prepare_measurement(const struct smbios3_entry *entry, > void *table_end; > struct smbios_header *header; > > - table_end = (void *)((u8 *)smbios_copy + entry->max_struct_size); > + table_end = (void *)((u8 *)smbios_copy + entry->table_maximum_size); > > for (i = 0; i < ARRAY_SIZE(smbios_filter_tables); i++) { > header = smbios_copy; > diff --git a/lib/smbios.c b/lib/smbios.c > index 327f78c8b0..c83af730a9 100644 > --- a/lib/smbios.c > +++ b/lib/smbios.c > @@ -615,7 +615,7 @@ ulong write_smbios_table(ulong addr) > se->minor_ver = SMBIOS_MINOR_VER; > se->doc_rev = 0; > se->entry_point_rev = 1; > - se->max_struct_size = len; > + se->table_maximum_size = len; > se->struct_table_address = table_addr; > se->checksum = table_compute_checksum(se, sizeof(struct smbios3_entry)); > unmap_sysmem(se); > -- > 2.43.0 > Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
diff --git a/cmd/smbios.c b/cmd/smbios.c index e2d82be163..66f6b76137 100644 --- a/cmd/smbios.c +++ b/cmd/smbios.c @@ -142,7 +142,7 @@ static int do_smbios(struct cmd_tbl *cmdtp, int flag, int argc, entry3->major_ver, entry3->minor_ver, entry3->doc_rev); table = (void *)(uintptr_t)entry3->struct_table_address; size = entry3->length; - table_maximum_size = entry3->max_struct_size; + table_maximum_size = entry3->table_maximum_size; } else if (!memcmp(entry, smbios_sig, sizeof(smbios_sig) - 1)) { struct smbios_entry *entry2 = entry; diff --git a/drivers/misc/qfw_smbios.c b/drivers/misc/qfw_smbios.c index a898cb4eea..c3e8c310d0 100644 --- a/drivers/misc/qfw_smbios.c +++ b/drivers/misc/qfw_smbios.c @@ -90,7 +90,7 @@ static int qfw_parse_smbios_anchor(struct udevice *dev, entry->length = sizeof(struct smbios3_entry); entry->major_ver = entry2->major_ver; entry->minor_ver = entry2->minor_ver; - entry->max_struct_size = entry2->struct_table_length; + entry->table_maximum_size = entry2->struct_table_length; } else { ret = -ENOENT; goto out; diff --git a/include/smbios.h b/include/smbios.h index e2b7f69584..3df8827b60 100644 --- a/include/smbios.h +++ b/include/smbios.h @@ -75,7 +75,7 @@ struct __packed smbios3_entry { /** @reserved: reserved */ u8 reserved; /** maximum size of SMBIOS table */ - u32 max_struct_size; + u32 table_maximum_size; /** @struct_table_address: 64-bit physical starting address */ u64 struct_table_address; }; diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c index b5d4aa7be5..b07e0099c2 100644 --- a/lib/efi_loader/efi_tcg2.c +++ b/lib/efi_loader/efi_tcg2.c @@ -1098,7 +1098,7 @@ tcg2_measure_smbios(struct udevice *dev, */ event_size = sizeof(struct smbios_handoff_table_pointers2) + FIELD_SIZEOF(struct efi_configuration_table, guid) + - entry->max_struct_size; + entry->table_maximum_size; event = calloc(1, event_size); if (!event) { ret = EFI_OUT_OF_RESOURCES; @@ -1113,7 +1113,7 @@ tcg2_measure_smbios(struct udevice *dev, smbios_copy = (struct smbios_header *)((uintptr_t)&event->table_entry[0].table); memcpy(&event->table_entry[0].table, (void *)((uintptr_t)entry->struct_table_address), - entry->max_struct_size); + entry->table_maximum_size); smbios_prepare_measurement(entry, smbios_copy); diff --git a/lib/efi_loader/smbiosdump.c b/lib/efi_loader/smbiosdump.c index f0b901897e..2f0b91a353 100644 --- a/lib/efi_loader/smbiosdump.c +++ b/lib/efi_loader/smbiosdump.c @@ -329,7 +329,7 @@ efi_status_t do_check(void) return EFI_LOAD_ERROR; } table = (void *)(uintptr_t)smbios3_anchor->struct_table_address; - len = smbios3_anchor->max_struct_size; + len = smbios3_anchor->table_maximum_size; } else { struct smbios_entry *smbios_anchor; int r; @@ -469,7 +469,7 @@ static efi_status_t do_save(u16 *filename) smbios3_anchor = get_config_table(&smbios3_guid); if (smbios3_anchor) { - size = 0x20 + smbios3_anchor->max_struct_size; + size = 0x20 + smbios3_anchor->table_maximum_size; ret = bs->allocate_pool(EFI_LOADER_DATA, size, (void **)&buf); if (ret != EFI_SUCCESS) { error(u"Out of memory\n"); @@ -480,7 +480,7 @@ static efi_status_t do_save(u16 *filename) memcpy(buf, smbios3_anchor, smbios3_anchor->length); memcpy(buf + 0x20, (void *)(uintptr_t)smbios3_anchor->struct_table_address, - smbios3_anchor->max_struct_size); + smbios3_anchor->table_maximum_size); smbios3_anchor = (struct smbios3_entry *)buf; smbios3_anchor->struct_table_address = 0x20; diff --git a/lib/smbios-parser.c b/lib/smbios-parser.c index 0d1ac781b3..9a62b3c760 100644 --- a/lib/smbios-parser.c +++ b/lib/smbios-parser.c @@ -230,7 +230,7 @@ void smbios_prepare_measurement(const struct smbios3_entry *entry, void *table_end; struct smbios_header *header; - table_end = (void *)((u8 *)smbios_copy + entry->max_struct_size); + table_end = (void *)((u8 *)smbios_copy + entry->table_maximum_size); for (i = 0; i < ARRAY_SIZE(smbios_filter_tables); i++) { header = smbios_copy; diff --git a/lib/smbios.c b/lib/smbios.c index 327f78c8b0..c83af730a9 100644 --- a/lib/smbios.c +++ b/lib/smbios.c @@ -615,7 +615,7 @@ ulong write_smbios_table(ulong addr) se->minor_ver = SMBIOS_MINOR_VER; se->doc_rev = 0; se->entry_point_rev = 1; - se->max_struct_size = len; + se->table_maximum_size = len; se->struct_table_address = table_addr; se->checksum = table_compute_checksum(se, sizeof(struct smbios3_entry)); unmap_sysmem(se);
In the SMBIOS 3 entry point the Structure Table Maximum Size field was incorrectly named max_struct_size. A Maximum Structure Size field only exists in the SMBIOS 2.1 entry point and has a different meaning. Call the Structure Table Length field table_maximum_size. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> --- cmd/smbios.c | 2 +- drivers/misc/qfw_smbios.c | 2 +- include/smbios.h | 2 +- lib/efi_loader/efi_tcg2.c | 4 ++-- lib/efi_loader/smbiosdump.c | 6 +++--- lib/smbios-parser.c | 2 +- lib/smbios.c | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-)