mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +02:00
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: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Stefan Reinauer <stepan@coresystems.de>
This commit is contained in:
parent
27c3e2dc23
commit
ecab4fce51
14
layout.c
14
layout.c
@ -21,6 +21,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
|
|
||||||
@ -57,7 +58,18 @@ int show_id(uint8_t *bios, int size, int force)
|
|||||||
walk--;
|
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");
|
printf("Flash image seems to be a legacy BIOS. Disabling checks.\n");
|
||||||
mainboard_vendor = def_name;
|
mainboard_vendor = def_name;
|
||||||
mainboard_part = def_name;
|
mainboard_part = def_name;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user