Commit ecab4fce authored by Carl-Daniel Hailfinger's avatar Carl-Daniel Hailfinger
Browse files

Improve coreboot image detection heuristic


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.

Corresponding to flashrom svn r292 and coreboot v2 svn r3408.
Signed-off-by: default avatarCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Reinauer <stepan@coresystems.de> 
parent 27c3e2dc
......@@ -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 @@ int show_id(uint8_t *bios, int size, int force)
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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment