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:
Florian Zumbiehl 2011-11-01 20:17:11 +01:00 committed by Patrick Georgi
parent 2c3cd125be
commit 2d4fecec51
2 changed files with 4 additions and 2 deletions

View File

@ -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;
} }

View File

@ -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;
} }