summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Zumbiehl <florz@florz.de>2011-11-01 20:17:11 +0100
committerPatrick Georgi <patrick@georgi-clan.de>2011-11-02 10:49:24 +0100
commit2d4fecec5174908db8a6b660f5b6fffd22e20ea4 (patch)
tree2e8a7ce9c12a796745f1d46842cdce0ef63645bb
parent2c3cd125be1e617a3b113f4898d131e4a10faae7 (diff)
downloadcoreboot-2d4fecec5174908db8a6b660f5b6fffd22e20ea4.tar.xz
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>
-rw-r--r--payloads/libpayload/libcbfs/cbfs_core.c3
-rw-r--r--src/lib/cbfs_core.c3
2 files changed, 4 insertions, 2 deletions
diff --git a/payloads/libpayload/libcbfs/cbfs_core.c b/payloads/libpayload/libcbfs/cbfs_core.c
index 596fa3ff72..4bf755b0f8 100644
--- a/payloads/libpayload/libcbfs/cbfs_core.c
+++ b/payloads/libpayload/libcbfs/cbfs_core.c
@@ -97,6 +97,7 @@ struct cbfs_file *cbfs_find(const char *name)
data = (void*)phys_to_virt(romstart()) + ntohl(header->offset);
dataend = (void*)phys_to_virt(romstart()) + ntohl(header->romsize);
}
+ dataend -= ntohl(header->bootblocksize);
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) {
// no file header found. corruption?
// 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));
continue;
}
diff --git a/src/lib/cbfs_core.c b/src/lib/cbfs_core.c
index 596fa3ff72..4bf755b0f8 100644
--- a/src/lib/cbfs_core.c
+++ b/src/lib/cbfs_core.c
@@ -97,6 +97,7 @@ struct cbfs_file *cbfs_find(const char *name)
data = (void*)phys_to_virt(romstart()) + ntohl(header->offset);
dataend = (void*)phys_to_virt(romstart()) + ntohl(header->romsize);
}
+ dataend -= ntohl(header->bootblocksize);
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) {
// no file header found. corruption?
// 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));
continue;
}