cbfstool/add-payload: initialize segment headers to 0

Some types of payload segment headers do not use all fields.
If these unused fields are not initialized to 0, they can
cause problems in other software which consumes payloads.

For example, PAYLOAD_SEGMENT_ENTRY does not use the compression
field.  If it happens to be a non-existent compression type,
the 'cbfstool extract' command fails.

BUG=https://ticket.coreboot.org/issues/170
TEST=cbfstool tianocore.cbfs create -s 2097152 -m x86
     cbfstool tianocore.cbfs add-payload -f UEFIPAYLOAD.fd -n payload -c lzma -v
     xxd tianocore.cbfs | head  # visually inspect compression field for 0

Change-Id: I359ed117ab4154438bac7172aebf608f7a022552
Signed-off-by: kitching@google.com
Reviewed-on: https://review.coreboot.org/27540
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Joel Kitching 2018-07-19 07:36:38 +08:00 committed by Patrick Georgi
parent 202e7d4f3c
commit a302e7f46b
1 changed files with 3 additions and 3 deletions

View File

@ -130,7 +130,7 @@ int parse_elf_to_payload(const struct buffer *input, struct buffer *output,
segments++; segments++;
} }
/* allocate the segment header array */ /* Allocate and initialize the segment header array */
segs = calloc(segments, sizeof(*segs)); segs = calloc(segments, sizeof(*segs));
if (segs == NULL) { if (segs == NULL) {
ret = -1; ret = -1;
@ -250,7 +250,7 @@ int parse_flat_binary_to_payload(const struct buffer *input,
enum comp_algo algo) enum comp_algo algo)
{ {
comp_func_ptr compress; comp_func_ptr compress;
struct cbfs_payload_segment segs[2]; struct cbfs_payload_segment segs[2] = {0};
int doffset, len = 0; int doffset, len = 0;
compress = compression_function(algo); compress = compression_function(algo);
@ -295,7 +295,7 @@ int parse_fv_to_payload(const struct buffer *input, struct buffer *output,
enum comp_algo algo) enum comp_algo algo)
{ {
comp_func_ptr compress; comp_func_ptr compress;
struct cbfs_payload_segment segs[2]; struct cbfs_payload_segment segs[2] = {0};
int doffset, len = 0; int doffset, len = 0;
firmware_volume_header_t *fv; firmware_volume_header_t *fv;
ffs_file_header_t *fh; ffs_file_header_t *fh;