From 5c8d8203303c84fba038af753a5f675d3899be7c Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 30 Nov 2013 18:19:16 +0200 Subject: [PATCH] busybox: init: check for zero-size *.md5 files busybox's md5sum applet does not fail if sizeof .md5 file is 0, so in some rare cases (impropper shutdown before update / broken RPi sdcard) we may updateto 0byte KERNEL/SYSTEM because md5 check didn't fail closes #2788 --- .../sysutils/busybox-initramfs/scripts/init | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/initramfs/sysutils/busybox-initramfs/scripts/init b/packages/initramfs/sysutils/busybox-initramfs/scripts/init index b2badd7201..746447a399 100755 --- a/packages/initramfs/sysutils/busybox-initramfs/scripts/init +++ b/packages/initramfs/sysutils/busybox-initramfs/scripts/init @@ -477,14 +477,22 @@ # check md5 sums if .nocheck doesn't exist if [ "$MD5_NOCHECK" -eq "0" ] ; then if [ -f "$UPDATE_DIR/${UPDATE_KERNEL}.md5" -a -f "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" ] ; then - sed -i 's#target#/storage/.update#g' "$UPDATE_DIR/${UPDATE_KERNEL}.md5" - sed -i 's#target#/storage/.update#g' "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" + # *.md5 size-check + SYSTEM_MD5_SIZE=$(stat -t "$UPDATE_DIR/${UPDATE_KERNEL}.md5" | awk '{print $2}') + KERNEL_MD5_SIZE=$(stat -t "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" | awk '{print $2}') + if [ "$SYSTEM_MD5_SIZE" -eq 0 -o "$KERNEL_MD5_SIZE" -eq 0 ] ; then + echo "zero-sized .md5 file..." + MD5_FAILED="1" + else + sed -i 's#target#/storage/.update#g' "$UPDATE_DIR/${UPDATE_KERNEL}.md5" + sed -i 's#target#/storage/.update#g' "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" - echo "Checking ${UPDATE_KERNEL}.md5..." - md5sum -c "$UPDATE_DIR/${UPDATE_KERNEL}.md5" || MD5_FAILED="1" + echo "Checking ${UPDATE_KERNEL}.md5..." + md5sum -c "$UPDATE_DIR/${UPDATE_KERNEL}.md5" || MD5_FAILED="1" - echo "Checking ${UPDATE_SYSTEM}.md5..." - md5sum -c "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" || MD5_FAILED="1" + echo "Checking ${UPDATE_SYSTEM}.md5..." + md5sum -c "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" || MD5_FAILED="1" + fi else echo "missing ${UPDATE_KERNEL}.md5 or ${UPDATE_SYSTEM}.md5..." MD5_FAILED="1"