aboutsummaryrefslogtreecommitdiffstats
path: root/package/system
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-10-17 16:59:11 +0200
committerJo-Philipp Wich <jo@mein.io>2019-10-17 17:08:09 +0200
commit07dcbfa6e8d2c168111a193484c6c0464d3fae0b (patch)
treeeff204dc931b23bfeb881a627a17b85b4c964418 /package/system
parent180bd7597391bc43ac47008c12a561da110df5a0 (diff)
downloadupstream-07dcbfa6e8d2c168111a193484c6c0464d3fae0b.tar.gz
upstream-07dcbfa6e8d2c168111a193484c6c0464d3fae0b.tar.bz2
upstream-07dcbfa6e8d2c168111a193484c6c0464d3fae0b.zip
fwtool: do not omit final 16 byte when image does not contain signature
The fwutil command will interpret the final 16 byte of a given firmware image files as "struct fwimage_trailer". In case these bytes do look like a valid trailer, we must ensure that we print them out along with the remainder of the image to not accidentally truncate non-trailer-images by 16 bytes when they're piped through fwtool, e.g. as part of an image verification command sequence. Some command sequences pipe images through fwtool in order to strip any possible metadata, certificate or signature trailers and do not expect bare images without any of that metadata to get truncated as other non- fwtool specific metadata is expected at the end of the file, e.g. an information block with an md5sum in case of the combined image format. Signed-off-by: Jo-Philipp Wich <jo@mein.io> (cherry picked from commit 889b841048c5eb7f975135cab363f1fdd9b6cfa1)
Diffstat (limited to 'package/system')
-rw-r--r--package/system/fwtool/Makefile2
-rw-r--r--package/system/fwtool/src/fwtool.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/package/system/fwtool/Makefile b/package/system/fwtool/Makefile
index 901081c1f4..283be8d77a 100644
--- a/package/system/fwtool/Makefile
+++ b/package/system/fwtool/Makefile
@@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fwtool
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_FLAGS:=nonshared
diff --git a/package/system/fwtool/src/fwtool.c b/package/system/fwtool/src/fwtool.c
index 3adc1e0249..89e89514ad 100644
--- a/package/system/fwtool/src/fwtool.c
+++ b/package/system/fwtool/src/fwtool.c
@@ -328,12 +328,14 @@ extract_data(const char *name)
if (extract_tail(&dbuf, &tr, sizeof(tr)))
break;
- data_len = be32_to_cpu(tr.size) - sizeof(tr);
if (tr.magic != cpu_to_be32(FWIMAGE_MAGIC)) {
msg("Data not found\n");
+ metadata_keep = true;
break;
}
+ data_len = be32_to_cpu(tr.size) - sizeof(tr);
+
if (be32_to_cpu(tr.crc32) != tail_crc32(&dbuf, crc32)) {
msg("CRC error\n");
break;