From dbd006b0820098ab1bc042a16853db7131cf91af Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 20 Feb 2014 23:38:49 -0800 Subject: cbfstool: Propogate compression errors back to the caller. When compression fails for whatever reason, the caller should know about it rather than blindly assuming it worked correctly. That can prevent half compressed data from ending up in the image. This is currently happening for a segment of depthcharge which is triggering a failure in LZMA. The size of the "compressed" data is never set and is recorded as zero, and that segment effectively isn't loaded during boot. Change-Id: Idbff01f5413d030bbf5382712780bbd0b9e83bc7 Signed-off-by: Gabe Black Reviewed-on: https://chromium-review.googlesource.com/187364 Reviewed-by: Hung-Te Lin Tested-by: Gabe Black Commit-Queue: Gabe Black (cherry picked from commit be48f3e41eaf0eaf6686c61c439095fc56883cec) Signed-off-by: Isaac Christensen Reviewed-on: http://review.coreboot.org/6960 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich Reviewed-by: Paul Menzel --- util/cbfstool/cbfs-mkpayload.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'util/cbfstool/cbfs-mkpayload.c') diff --git a/util/cbfstool/cbfs-mkpayload.c b/util/cbfstool/cbfs-mkpayload.c index adbe313b18..dabe32262b 100644 --- a/util/cbfstool/cbfs-mkpayload.c +++ b/util/cbfstool/cbfs-mkpayload.c @@ -205,8 +205,11 @@ int parse_elf_to_payload(const struct buffer *input, segs[segments].offset = doffset; int len; - compress((char *)&header[phdr[i].p_offset], - phdr[i].p_filesz, output->data + doffset, &len); + if (compress((char *)&header[phdr[i].p_offset], + phdr[i].p_filesz, output->data + doffset, &len)) { + buffer_delete(output); + return -1; + } segs[segments].len = len; /* If the compressed section is larger, then use the @@ -261,7 +264,10 @@ int parse_flat_binary_to_payload(const struct buffer *input, segs[0].mem_len = input->size; segs[0].offset = doffset; - compress(input->data, input->size, output->data + doffset, &len); + if (compress(input->data, input->size, output->data + doffset, &len)) { + buffer_delete(output); + return -1; + } segs[0].compression = algo; segs[0].len = len; @@ -387,7 +393,10 @@ int parse_fv_to_payload(const struct buffer *input, segs[0].mem_len = input->size; segs[0].offset = doffset; - compress(input->data, input->size, output->data + doffset, &len); + if (compress(input->data, input->size, output->data + doffset, &len)) { + buffer_delete(output); + return -1; + } segs[0].compression = algo; segs[0].len = len; -- cgit v1.2.3