Lean Sheng Tan submitted this change.

View Change



2 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.

Approvals: Arthur Heymans: Looks good to me, approved build bot (Jenkins): Verified Lean Sheng Tan: Looks good to me, but someone else must approve
lib/smbios: Add 32 bit entry point if below 4G

If the smbios table is not below 4G there is no need to have a 32 bit
entry point. Even worse it could cause the payload to try to use the
entry point.

Signed-off-by: Maximilian Brune <maximilian.brune@9elements.com>
Change-Id: I4cb426bb0c45282ed03ff4c65d15004b7f985dab
Reviewed-on: https://review.coreboot.org/c/coreboot/+/76911
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
---
M src/lib/smbios.c
1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/src/lib/smbios.c b/src/lib/smbios.c
index 51f1593..c6cfb05 100644
--- a/src/lib/smbios.c
+++ b/src/lib/smbios.c
@@ -1203,7 +1203,7 @@

unsigned long smbios_write_tables(unsigned long current)
{
- struct smbios_entry *se;
+ struct smbios_entry *se = NULL;
struct smbios_entry30 *se3;
unsigned long tables;
int len = 0;
@@ -1213,9 +1213,12 @@
current = ALIGN_UP(current, 16);
printk(BIOS_DEBUG, "%s: %08lx\n", __func__, current);

- se = (struct smbios_entry *)current;
- current += sizeof(*se);
- current = ALIGN_UP(current, 16);
+ // only add a 32 bit entry point if SMBIOS table is below 4G
+ if (current < UINT32_MAX) {
+ se = (struct smbios_entry *)current;
+ current += sizeof(*se);
+ current = ALIGN_UP(current, 16);
+ }

se3 = (struct smbios_entry30 *)current;
current += sizeof(*se3);
@@ -1253,21 +1256,23 @@

update_max(len, max_struct_size, smbios_write_type127(&current, handle++));

- /* Install SMBIOS 2.1 entry point */
- memset(se, 0, sizeof(*se));
- memcpy(se->anchor, "_SM_", 4);
- se->length = sizeof(*se);
- se->major_version = 3;
- se->minor_version = 0;
- se->max_struct_size = max_struct_size;
- se->struct_count = handle;
- memcpy(se->intermediate_anchor_string, "_DMI_", 5);
+ if (se) {
+ /* Install SMBIOS 2.1 entry point */
+ memset(se, 0, sizeof(*se));
+ memcpy(se->anchor, "_SM_", 4);
+ se->length = sizeof(*se);
+ se->major_version = 3;
+ se->minor_version = 0;
+ se->max_struct_size = max_struct_size;
+ se->struct_count = handle;
+ memcpy(se->intermediate_anchor_string, "_DMI_", 5);

- se->struct_table_address = (u32)tables;
- se->struct_table_length = len;
+ se->struct_table_address = (u32)tables;
+ se->struct_table_length = len;

- se->intermediate_checksum = smbios_checksum((u8 *)se + 0x10, sizeof(*se) - 0x10);
- se->checksum = smbios_checksum((u8 *)se, sizeof(*se));
+ se->intermediate_checksum = smbios_checksum((u8 *)se + 0x10, sizeof(*se) - 0x10);
+ se->checksum = smbios_checksum((u8 *)se, sizeof(*se));
+ }

/* Install SMBIOS 3.0 entry point */
memset(se3, 0, sizeof(*se3));

To view, visit change 76911. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: main
Gerrit-Change-Id: I4cb426bb0c45282ed03ff4c65d15004b7f985dab
Gerrit-Change-Number: 76911
Gerrit-PatchSet: 4
Gerrit-Owner: Maximilian Brune <maximilian.brune@9elements.com>
Gerrit-Reviewer: Arthur Heymans <arthur@aheymans.xyz>
Gerrit-Reviewer: Felix Held <felix-coreboot@felixheld.de>
Gerrit-Reviewer: Lean Sheng Tan <sheng.tan@9elements.com>
Gerrit-Reviewer: Nico Huber <nico.h@gmx.de>
Gerrit-Reviewer: Patrick Rudolph <patrick.rudolph@9elements.com>
Gerrit-Reviewer: Subrata Banik <subratabanik@google.com>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-CC: Martin L Roth <gaumless@gmail.com>
Gerrit-CC: Stefan Reinauer <stefan.reinauer@coreboot.org>
Gerrit-MessageType: merged