From 2e978dc652969f6a7089713d8f726dda23a98205 Mon Sep 17 00:00:00 2001 From: Bruce Rogers Date: Fri, 27 Mar 2015 18:03:36 -0600 Subject: [PATCH] smbios: avoid having an arbitrary _SM_ string located in F segment The way the SMBIOS table is located is to search the F segment for the byte sequence _SM_ located at the beginning of a paragragh. It was found that SeaBIOS has a "_SM_" string contained within the image which is not part of the SMBIOS table, and it was located ahead of the actual SMBIOS table, causing obvious problems. Signed-off-by: Bruce Rogers --- src/fw/biostables.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fw/biostables.c b/src/fw/biostables.c index 50a891b..568f404 100644 --- a/src/fw/biostables.c +++ b/src/fw/biostables.c @@ -271,7 +271,8 @@ copy_smbios(void *pos) if (SMBiosAddr) return; struct smbios_entry_point *p = pos; - if (memcmp(p->anchor_string, "_SM_", 4)) + // avoid storing the _SM_ string - it's problematic! + if (memcmp(p->anchor_string, "_SM", 3) || p->anchor_string[3] != '_' ) return; if (checksum(pos, 0x10) != 0) return; -- 1.9.0