[coreboot] [PATCH] flashrom: Improve coreboot image detection heuristic

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Thu Jul 3 16:28:54 CEST 2008


Improve coreboot image detection heuristic in flashrom. It's not
absolutely perfect, but the likelihood of this check to fail is
0.000000000000000000000000013 (1.3*10^-26) which is good enough for me.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Index: flashrom-tmp1/layout.c
===================================================================
--- flashrom-tmp1/layout.c	(Revision 3407)
+++ flashrom-tmp1/layout.c	(Arbeitskopie)
@@ -21,6 +21,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 #include <stdint.h>
 #include "flash.h"
 
@@ -57,7 +58,18 @@
 		walk--;
 	}
 
-	if ((*walk) == 0 || ((*walk) & 0x3ff) != 0) {
+	/*
+	 * Check if coreboot last image size is 0 or not a multiple of 1k or
+	 * bigger than the chip or if the pointers to vendor ID or mainboard ID
+	 * are outside the image of if the start of ID strings are nonsensical
+	 * (nonprintable and not \0).
+	 */
+	if ((*walk) == 0 || ((*walk) & 0x3ff) != 0 || *walk > size ||
+		*(walk - 1) > size || *(walk - 2) > size ||
+		(!isprint((const char *)(bios + size - *(walk - 1))) &&
+		((const char *)(bios + size - *(walk - 1)))) ||
+		(!isprint((const char *)(bios + size - *(walk - 2))) &&
+		((const char *)(bios + size - *(walk - 2))))) {
 		printf("Flash image seems to be a legacy BIOS. Disabling checks.\n");
 		mainboard_vendor = def_name;
 		mainboard_part = def_name;


-- 
http://www.hailfinger.org/





More information about the coreboot mailing list