diff options
-rw-r--r-- | util/cbfstool/cbfs-mkpayload.c | 10 | ||||
-rw-r--r-- | util/cbfstool/fv.h | 2 |
2 files changed, 12 insertions, 0 deletions
diff --git a/util/cbfstool/cbfs-mkpayload.c b/util/cbfstool/cbfs-mkpayload.c index e207b3e40f..6115e492c3 100644 --- a/util/cbfstool/cbfs-mkpayload.c +++ b/util/cbfstool/cbfs-mkpayload.c @@ -279,6 +279,11 @@ int parse_fv_to_payload(const struct buffer *input, } fh = (ffs_file_header_t *)(input->data + fv->header_length); + while (fh->file_type == FILETYPE_PAD) { + unsigned long offset = (fh->size[2] << 16) | (fh->size[1] << 8) | fh->size[0]; + ERROR("skipping %d bytes of FV padding\n", offset); + fh = (ffs_file_header_t *)(((void*)fh) + offset); + } if (fh->file_type != FILETYPE_SEC) { ERROR("Not a usable UEFI firmware volume.\n"); INFO("First file in first FV not a SEC core.\n"); @@ -286,6 +291,11 @@ int parse_fv_to_payload(const struct buffer *input, } cs = (common_section_header_t *)&fh[1]; + while (cs->section_type == SECTION_RAW) { + unsigned long offset = (cs->size[2] << 16) | (cs->size[1] << 8) | cs->size[0]; + ERROR("skipping %d bytes of section padding\n", offset); + cs = (common_section_header_t *)(((void*)cs) + offset); + } if (cs->section_type != SECTION_PE32) { ERROR("Not a usable UEFI firmware volume.\n"); INFO("Section type not PE32.\n"); diff --git a/util/cbfstool/fv.h b/util/cbfstool/fv.h index 1ea50e033e..88457bf4f1 100644 --- a/util/cbfstool/fv.h +++ b/util/cbfstool/fv.h @@ -33,6 +33,7 @@ typedef struct { } firmware_volume_header_t; #define FILETYPE_SEC 0x03 +#define FILETYPE_PAD 0xf0 typedef struct { uint8_t name[16]; uint16_t integrity; @@ -43,6 +44,7 @@ typedef struct { } ffs_file_header_t; #define SECTION_PE32 0x10 +#define SECTION_RAW 0x19 typedef struct { uint8_t size[3]; uint8_t section_type; |