Page MenuHomeFreeBSD

D49285.id152139.diff
No OneTemporary

D49285.id152139.diff

diff --git a/stand/libsa/smbios.c b/stand/libsa/smbios.c
--- a/stand/libsa/smbios.c
+++ b/stand/libsa/smbios.c
@@ -92,6 +92,7 @@
#define SMBIOS_SIG "_SM_"
#define SMBIOS3_SIG "_SM3_"
#define SMBIOS_DMI_SIG "_DMI_"
+#define SMBIOS_EOT_TYPE 0x7f
/*
* 5.1 General
@@ -504,6 +505,9 @@
(size & 0x7fff) : (size << 10);
break;
+ case SMBIOS_EOT_TYPE: /* 3.3.42 End-of-Table (Type 127) */
+ return (NULL);
+
default: /* skip other types */
break;
}
@@ -529,15 +533,19 @@
ep = smbios.addr + smbios.length;
for (dmi = smbios.addr, i = 0;
dmi < ep && i < smbios.count; i++) {
- if (SMBIOS_GET8(dmi, 0) == type) {
- return dmi;
- }
+ const uint8_t seen_type = SMBIOS_GET8(dmi, 0);
+
+ if (seen_type == type)
+ return (dmi);
+ if (seen_type == SMBIOS_EOT_TYPE)
+ /* End of table. */
+ break;
/* Find structure terminator. */
dmi = SMBIOS_GETSTR(dmi);
- while (SMBIOS_GET16(dmi, 0) != 0 && dmi < ep) {
+ while (SMBIOS_GET16(dmi, 0) != 0 && dmi < ep)
dmi++;
- }
- dmi += 2; /* For checksum */
+ /* Skip it. */
+ dmi += 2;
}
return (NULL);
@@ -632,8 +640,8 @@
if (smbios.addr == NULL)
return;
- for (dmi = smbios.addr, i = 0;
- dmi < smbios.addr + smbios.length && i < smbios.count; i++)
+ for (dmi = smbios.addr, i = 0; dmi != NULL &&
+ dmi < smbios.addr + smbios.length && i < smbios.count; i++)
dmi = smbios_parse_table(dmi);
setenv("smbios.entry_point_type",

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 30, 3:10 PM (14 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17053954
Default Alt Text
D49285.id152139.diff (1 KB)

Event Timeline