aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/smbios/smbios.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/smbios/smbios.h')
-rw-r--r--sys/dev/smbios/smbios.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/dev/smbios/smbios.h b/sys/dev/smbios/smbios.h
index 42b7e1181486..01e67556cfc0 100644
--- a/sys/dev/smbios/smbios.h
+++ b/sys/dev/smbios/smbios.h
@@ -80,11 +80,13 @@ struct smbios_structure_header {
typedef void (*smbios_callback_t)(struct smbios_structure_header *, void *);
static inline void
-smbios_walk_table(uint8_t *p, int entries, smbios_callback_t cb, void *arg)
+smbios_walk_table(uint8_t *p, int entries, vm_size_t len,
+ smbios_callback_t cb, void *arg)
{
struct smbios_structure_header *s;
+ uint8_t *endp = p + len;
- while (entries--) {
+ while (entries-- && p < endp) {
s = (struct smbios_structure_header *)p;
cb(s, arg);
@@ -93,7 +95,7 @@ smbios_walk_table(uint8_t *p, int entries, smbios_callback_t cb, void *arg)
* formatted area of this structure.
*/
p += s->length;
- while (!(p[0] == 0 && p[1] == 0))
+ while (p + 1 < endp && !(p[0] == 0 && p[1] == 0))
p++;
/*