mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00
Fix and clean up coreboot image detection heuristic
Additional compile fix for NetBSD. Corresponding to flashrom svn r303 and coreboot v2 svn r3420. 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
f83221b6db
commit
85f8a1725f
32
layout.c
32
layout.c
@ -45,6 +45,11 @@ static char *def_name = "DEFAULT";
|
|||||||
int show_id(uint8_t *bios, int size, int force)
|
int show_id(uint8_t *bios, int size, int force)
|
||||||
{
|
{
|
||||||
unsigned int *walk;
|
unsigned int *walk;
|
||||||
|
unsigned int mb_part_offset, mb_vendor_offset;
|
||||||
|
char *mb_part, *mb_vendor;
|
||||||
|
|
||||||
|
mainboard_vendor = def_name;
|
||||||
|
mainboard_part = def_name;
|
||||||
|
|
||||||
walk = (unsigned int *)(bios + size - 0x10);
|
walk = (unsigned int *)(bios + size - 0x10);
|
||||||
walk--;
|
walk--;
|
||||||
@ -63,25 +68,28 @@ int show_id(uint8_t *bios, int size, int force)
|
|||||||
* are outside the image of if the start of ID strings are nonsensical
|
* are outside the image of if the start of ID strings are nonsensical
|
||||||
* (nonprintable and not \0).
|
* (nonprintable and not \0).
|
||||||
*/
|
*/
|
||||||
if ((*walk) == 0 || ((*walk) & 0x3ff) != 0 || *walk > size ||
|
mb_part_offset = *(walk - 1);
|
||||||
*(walk - 1) > size || *(walk - 2) > size ||
|
mb_vendor_offset = *(walk - 2);
|
||||||
(!isprint((const char *)(bios + size - *(walk - 1))) &&
|
if ((*walk) == 0 || ((*walk) & 0x3ff) != 0 || (*walk) > size ||
|
||||||
((const char *)(bios + size - *(walk - 1)))) ||
|
mb_part_offset > size || mb_vendor_offset > size) {
|
||||||
(!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;
|
return 0;
|
||||||
mainboard_part = def_name;
|
}
|
||||||
|
|
||||||
|
mb_part = (char *)(bios + size - mb_part_offset);
|
||||||
|
mb_vendor = (char *)(bios + size - mb_vendor_offset);
|
||||||
|
if (!isprint((unsigned char)*mb_part) ||
|
||||||
|
!isprint((unsigned char)*mb_vendor)) {
|
||||||
|
printf("Flash image seems to have garbage in the ID location."
|
||||||
|
" Disabling checks.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_debug("coreboot last image size "
|
printf_debug("coreboot last image size "
|
||||||
"(not ROM size) is %d bytes.\n", *walk);
|
"(not ROM size) is %d bytes.\n", *walk);
|
||||||
|
|
||||||
walk--;
|
mainboard_part = strdup(mb_part);
|
||||||
mainboard_part = strdup((const char *)(bios + size - *walk));
|
mainboard_vendor = strdup(mb_vendor);
|
||||||
walk--;
|
|
||||||
mainboard_vendor = strdup((const char *)(bios + size - *walk));
|
|
||||||
printf_debug("Manufacturer: %s\n", mainboard_vendor);
|
printf_debug("Manufacturer: %s\n", mainboard_vendor);
|
||||||
printf_debug("Mainboard ID: %s\n", mainboard_part);
|
printf_debug("Mainboard ID: %s\n", mainboard_part);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user