base-files: safer sysupgrade.tar for kernel-out-of-UBI
authorRodrigo Balerdi <lanchon@gmail.com>
Fri, 15 Apr 2022 06:24:58 +0000 (03:24 -0300)
committerDaniel Golle <daniel@makrotopia.org>
Tue, 19 Apr 2022 15:28:25 +0000 (16:28 +0100)
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 <lanchon@gmail.com>
package/base-files/files/lib/upgrade/nand.sh

index f927c066dab769230c4d3ca655dca2d01e1d8a34..a93c9acccdb0c8fee6e57b6268ea111adbfd97ce 100644 (file)
@@ -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 | \