treewide: validate unified uImage.FIT images before flashing
authorDaniel Golle <daniel@makrotopia.org>
Sat, 29 Mar 2025 05:09:09 +0000 (05:09 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 21 Apr 2025 15:12:42 +0000 (16:12 +0100)
Prevent flashing truncated or otherwise corrupted uImage.FIT images
by verifying checksums and hashes of all sub-images before flashing
using the newly packaged fit_check_sign tool.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
package/utils/fitblk/Makefile
package/utils/fitblk/files/fit.sh
target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh
target/linux/mediatek/mt7622/base-files/lib/upgrade/platform.sh
target/linux/mediatek/mt7623/base-files/lib/upgrade/platform.sh
target/linux/siflower/sf21/base-files/lib/upgrade/platform.sh

index 325963d8e2513d56d5ce8849cf64fb3f22e857be..b8f881937e8dd26f0522a6747ab3c219f227a907 100644 (file)
@@ -16,6 +16,7 @@ define Package/fitblk
   SECTION:=base
   CATEGORY:=Base system
   TITLE:=fitblk firmware release tool
+  DEPENDS:=+fit-check-sign
 endef
 
 define Package/fitblk/description
index b715a15ddfba1afd213934012bdc11a819866551..839389bed4db0a147dfc1910fe75e72e9c4b55b0 100644 (file)
@@ -61,3 +61,13 @@ fit_do_upgrade() {
                ;;
        esac
 }
+
+fit_check_image() {
+       local magic="$(get_magic_long "$1")"
+       [ "$magic" != "d00dfeed" ] && {
+               echo "Invalid image type."
+               return 74
+       }
+
+       fit_check_sign -f "$1" >/dev/null || return 74
+}
index 622f88060441a171aab0e7fa5048d9fdaef5970b..01753c0a03bddf1580032bf587784841583ac453 100755 (executable)
@@ -1,5 +1,5 @@
 REQUIRE_IMAGE_METADATA=1
-RAMFS_COPY_BIN='fitblk'
+RAMFS_COPY_BIN='fitblk fit_check_sign'
 
 asus_initial_setup()
 {
@@ -224,11 +224,8 @@ platform_check_image() {
        xiaomi,redmi-router-ax6000-ubootmod|\
        xiaomi,mi-router-wr30u-ubootmod|\
        zyxel,ex5601-t0-ubootmod)
-               [ "$magic" != "d00dfeed" ] && {
-                       echo "Invalid image type."
-                       return 1
-               }
-               return 0
+               fit_check_image "$1"
+               return $?
                ;;
        nradio,c8-668gl)
                # tar magic `ustar`
index f017509637efb036bcbc2f4ad430e5a7f4c90419..9019eb690050ccbaf4a038513761464b9aa61d61 100755 (executable)
@@ -1,5 +1,5 @@
 REQUIRE_IMAGE_METADATA=1
-RAMFS_COPY_BIN='fitblk'
+RAMFS_COPY_BIN='fitblk fit_check_sign'
 
 platform_do_upgrade() {
        local board=$(board_name)
index bce6709a58abd9a2028bd98aa8590a6662021091..ce40e26afbb1d475f511a62c58fd7ee70a1f2f05 100755 (executable)
@@ -1,5 +1,5 @@
 REQUIRE_IMAGE_METADATA=1
-RAMFS_COPY_BIN='fitblk'
+RAMFS_COPY_BIN='fitblk fit_check_sign'
 
 # Legacy full system upgrade including preloader for MediaTek SoCs on eMMC or SD
 legacy_mtk_mmc_full_upgrade() {
index ac90f253b45987eb85313289ef713e962163c735..72f35f6925b0c0eacd54a463538f316a51bf998c 100644 (file)
@@ -1,5 +1,5 @@
 REQUIRE_IMAGE_METADATA=1
-RAMFS_COPY_BIN='fitblk'
+RAMFS_COPY_BIN='fitblk fit_check_sign'
 
 platform_do_upgrade() {
        local board=$(board_name)
@@ -18,17 +18,13 @@ PART_NAME=firmware
 
 platform_check_image() {
        local board=$(board_name)
-       local magic="$(get_magic_long "$1")"
 
        [ "$#" -gt 1 ] && return 1
 
        case "$board" in
        *)
-               [ "$magic" != "d00dfeed" ] && {
-                       echo "Invalid image type."
-                       return 1
-               }
-               return 0
+               fit_check_image "$1"
+               return $?
                ;;
        esac