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@gmx.net> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3408 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
f74c208256
commit
039b848066
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue