aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--stand/libsa/smbios.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/stand/libsa/smbios.c b/stand/libsa/smbios.c
index a88d3ac4ab69..01083fdfd756 100644
--- a/stand/libsa/smbios.c
+++ b/stand/libsa/smbios.c
@@ -520,19 +520,23 @@ smbios_find_struct(int type)
{
caddr_t dmi;
size_t i;
+ caddr_t ep;
if (smbios.addr == NULL)
return (NULL);
+ ep = smbios.addr + smbios.length;
for (dmi = smbios.addr, i = 0;
- dmi < smbios.addr + smbios.length && i < smbios.count; i++) {
- if (SMBIOS_GET8(dmi, 0) == type)
+ dmi < ep && i < smbios.count; i++) {
+ if (SMBIOS_GET8(dmi, 0) == type) {
return dmi;
+ }
/* Find structure terminator. */
dmi = SMBIOS_GETSTR(dmi);
- while (SMBIOS_GET16(dmi, 0) != 0)
+ while (SMBIOS_GET16(dmi, 0) != 0 && dmi < ep) {
dmi++;
- dmi += 2;
+ }
+ dmi += 2; /* For checksum */
}
return (NULL);