don't scan beyond end of CBFS
Change-Id: I66e535f77e513dbfa5fc906ecf288193af78ae62 Signed-off-by: Florian Zumbiehl <florz@florz.de> Reviewed-on: http://review.coreboot.org/369 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
parent
2c3cd125be
commit
2d4fecec51
|
@ -97,6 +97,7 @@ struct cbfs_file *cbfs_find(const char *name)
|
||||||
data = (void*)phys_to_virt(romstart()) + ntohl(header->offset);
|
data = (void*)phys_to_virt(romstart()) + ntohl(header->offset);
|
||||||
dataend = (void*)phys_to_virt(romstart()) + ntohl(header->romsize);
|
dataend = (void*)phys_to_virt(romstart()) + ntohl(header->romsize);
|
||||||
}
|
}
|
||||||
|
dataend -= ntohl(header->bootblocksize);
|
||||||
|
|
||||||
int align = ntohl(header->align);
|
int align = ntohl(header->align);
|
||||||
|
|
||||||
|
@ -106,7 +107,7 @@ struct cbfs_file *cbfs_find(const char *name)
|
||||||
if (memcmp(CBFS_FILE_MAGIC, file->magic, strlen(CBFS_FILE_MAGIC)) != 0) {
|
if (memcmp(CBFS_FILE_MAGIC, file->magic, strlen(CBFS_FILE_MAGIC)) != 0) {
|
||||||
// no file header found. corruption?
|
// no file header found. corruption?
|
||||||
// proceed in aligned steps to resynchronize
|
// proceed in aligned steps to resynchronize
|
||||||
LOG("No file header found at %p, searching for header\n", data);
|
LOG("ERROR: No file header found at %p, attempting to recover by searching for header\n", data);
|
||||||
data = phys_to_virt(CBFS_ALIGN_UP(virt_to_phys(data), align));
|
data = phys_to_virt(CBFS_ALIGN_UP(virt_to_phys(data), align));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,7 @@ struct cbfs_file *cbfs_find(const char *name)
|
||||||
data = (void*)phys_to_virt(romstart()) + ntohl(header->offset);
|
data = (void*)phys_to_virt(romstart()) + ntohl(header->offset);
|
||||||
dataend = (void*)phys_to_virt(romstart()) + ntohl(header->romsize);
|
dataend = (void*)phys_to_virt(romstart()) + ntohl(header->romsize);
|
||||||
}
|
}
|
||||||
|
dataend -= ntohl(header->bootblocksize);
|
||||||
|
|
||||||
int align = ntohl(header->align);
|
int align = ntohl(header->align);
|
||||||
|
|
||||||
|
@ -106,7 +107,7 @@ struct cbfs_file *cbfs_find(const char *name)
|
||||||
if (memcmp(CBFS_FILE_MAGIC, file->magic, strlen(CBFS_FILE_MAGIC)) != 0) {
|
if (memcmp(CBFS_FILE_MAGIC, file->magic, strlen(CBFS_FILE_MAGIC)) != 0) {
|
||||||
// no file header found. corruption?
|
// no file header found. corruption?
|
||||||
// proceed in aligned steps to resynchronize
|
// proceed in aligned steps to resynchronize
|
||||||
LOG("No file header found at %p, searching for header\n", data);
|
LOG("ERROR: No file header found at %p, attempting to recover by searching for header\n", data);
|
||||||
data = phys_to_virt(CBFS_ALIGN_UP(virt_to_phys(data), align));
|
data = phys_to_virt(CBFS_ALIGN_UP(virt_to_phys(data), align));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue