base-files: safer sysupgrade for kernel-in-UBI devices
[openwrt/openwrt.git] / package / base-files / files / lib / upgrade / nand.sh
index b5c982b27227fcec709048c4b0155364d71f2f30..f927c066dab769230c4d3ca655dca2d01e1d8a34 100644 (file)
@@ -288,7 +288,7 @@ nand_upgrade_tar() {
        local board_dir=$(tar tf "$tar_file" | grep -m 1 '^sysupgrade-.*/$')
        board_dir=${board_dir%/}
 
-       kernel_length=$( (tar xf "$tar_file" ${board_dir}/kernel -O | wc -c) 2> /dev/null)
+       local kernel_length=$( (tar xf "$tar_file" ${board_dir}/kernel -O | wc -c) 2> /dev/null)
        local has_rootfs=0
        local rootfs_length
        local rootfs_type
@@ -311,17 +311,17 @@ nand_upgrade_tar() {
        nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "${has_kernel:+$kernel_length}" "$has_env"
 
        local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
-       [ "$has_kernel" = "1" ] && {
-               local kern_ubivol="$( nand_find_volume $ubidev $CI_KERNPART )"
-               tar xf "$tar_file" ${board_dir}/kernel -O | \
-                       ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
-       }
-
        [ "$has_rootfs" = "1" ] && {
                local root_ubivol="$( nand_find_volume $ubidev $CI_ROOTPART )"
                tar xf "$tar_file" ${board_dir}/root -O | \
                        ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
        }
+
+       [ "$has_kernel" = "1" ] && {
+               local kern_ubivol="$( nand_find_volume $ubidev $CI_KERNPART )"
+               tar xf "$tar_file" ${board_dir}/kernel -O | \
+                       ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
+       }
        nand_do_upgrade_success
 }