summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--host/lib/fmap.c11
-rw-r--r--host/lib/include/fmap.h1
2 files changed, 9 insertions, 3 deletions
diff --git a/host/lib/fmap.c b/host/lib/fmap.c
index 3c3f340b..014c97b2 100644
--- a/host/lib/fmap.c
+++ b/host/lib/fmap.c
@@ -12,10 +12,15 @@
const char* FmapFind(const char* ptr, size_t size)
{
size_t i;
- for (i=0; i<size; i += FMAP_SEARCH_STRIDE) {
- if (0 == strncmp(ptr, FMAP_SIGNATURE, FMAP_SIGNATURE_SIZE))
+ FmapHeader *fmap_header;
+ for (i=0; i<size; i += FMAP_SEARCH_STRIDE, ptr += FMAP_SEARCH_STRIDE) {
+ if (0 != strncmp(ptr, FMAP_SIGNATURE, FMAP_SIGNATURE_SIZE))
+ continue;
+ // Image may have multiple signatures (ex, in code that handles FMAP itself)
+ // so we do want to check at least major version.
+ fmap_header = (FmapHeader *)ptr;
+ if (fmap_header->fmap_ver_major == FMAP_VER_MAJOR)
return ptr;
- ptr += FMAP_SEARCH_STRIDE;
}
return NULL;
}
diff --git a/host/lib/include/fmap.h b/host/lib/include/fmap.h
index 7da2dd90..92d74fd3 100644
--- a/host/lib/include/fmap.h
+++ b/host/lib/include/fmap.h
@@ -15,6 +15,7 @@
#define FMAP_SIGNATURE "__FMAP__"
#define FMAP_SIGNATURE_SIZE 8
#define FMAP_SEARCH_STRIDE 4
+#define FMAP_VER_MAJOR 1
typedef struct _FmapHeader {
char fmap_signature[FMAP_SIGNATURE_SIZE]; /* avoiding endian issues */
uint8_t fmap_ver_major;