From ecbcc0b595516d059092b89efbef69b93cf97f6a Mon Sep 17 00:00:00 2001 From: Rodrigo Balerdi Date: Fri, 15 Apr 2022 03:24:58 -0300 Subject: [PATCH] base-files: safer sysupgrade.tar for kernel-out-of-UBI Ensure that the kernel CRC is invalidated while rootfs is being updated. This allows the bootloader to detect an interrupted sysupgrade and fall back to an alternate booting method, such as TFTP, instead of just going ahead with normal boot and effectively bricking the device. Signed-off-by: Rodrigo Balerdi --- package/base-files/files/lib/upgrade/nand.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh index f927c066dab76..a93c9acccdb0c 100644 --- a/package/base-files/files/lib/upgrade/nand.sh +++ b/package/base-files/files/lib/upgrade/nand.sh @@ -303,7 +303,7 @@ nand_upgrade_tar() { local has_env=0 [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && { - tar xf "$tar_file" ${board_dir}/kernel -O | mtd write - $CI_KERNPART + mtd erase $CI_KERNPART } [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel= [ "$CI_KERNPART" = "none" ] && has_kernel= @@ -317,6 +317,10 @@ nand_upgrade_tar() { ubiupdatevol /dev/$root_ubivol -s $rootfs_length - } + [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && { + tar xf "$tar_file" ${board_dir}/kernel -O | \ + mtd -n write - $CI_KERNPART + } [ "$has_kernel" = "1" ] && { local kern_ubivol="$( nand_find_volume $ubidev $CI_KERNPART )" tar xf "$tar_file" ${board_dir}/kernel -O | \