Backport TP-Link image compatibility checks (verify hardware id &
revision) from AR71xx platform and adopt it for v2/v3 image header.

Use new functionality for Archer C20/C20i sysupgrade image verification.

Signed-off-by: Sergey Ryazanov <ryazanov....@gmail.com>
---
 target/linux/ramips/base-files/lib/ramips.sh       | 18 ++++++++++++
 .../ramips/base-files/lib/upgrade/platform.sh      | 32 ++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/target/linux/ramips/base-files/lib/ramips.sh 
b/target/linux/ramips/base-files/lib/ramips.sh
index d0b9bb1262..0e5d74908d 100755
--- a/target/linux/ramips/base-files/lib/ramips.sh
+++ b/target/linux/ramips/base-files/lib/ramips.sh
@@ -6,6 +6,24 @@
 RAMIPS_BOARD_NAME=
 RAMIPS_MODEL=
 
+tplink_get_v2_hwid() {
+       local part
+
+       part=$(find_mtd_part firmware)
+       [ -z "$part" ] && return 1
+
+       dd if=$part bs=4 count=1 skip=13 2>/dev/null | hexdump -v -n 4 -e '1/1 
"%02x"'
+}
+
+tplink_get_v2_mid() {
+       local part
+
+       part=$(find_mtd_part firmware)
+       [ -z "$part" ] && return 1
+
+       dd if=$part bs=4 count=1 skip=14 2>/dev/null | hexdump -v -n 4 -e '1/1 
"%02x"'
+}
+
 ramips_board_detect() {
        local machine
        local name
diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh 
b/target/linux/ramips/base-files/lib/upgrade/platform.sh
index e08c45d8db..9892241358 100755
--- a/target/linux/ramips/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh
@@ -2,8 +2,22 @@
 # Copyright (C) 2010 OpenWrt.org
 #
 
+. /lib/ramips.sh
+
 PART_NAME=firmware
 
+tplink_get_image_v2_hwid() {
+       get_image "$@" | dd bs=4 count=1 skip=13 2>/dev/null | hexdump -v -n 4 
-e '1/1 "%02x"'
+}
+
+tplink_get_image_v2_mid() {
+       get_image "$@" | dd bs=4 count=1 skip=14 2>/dev/null | hexdump -v -n 4 
-e '1/1 "%02x"'
+}
+
+tplink_get_image_v2_boot_size() {
+       get_image "$@" | dd bs=4 count=1 skip=34 2>/dev/null | hexdump -v -n 4 
-e '1/1 "%02x"'
+}
+
 platform_check_image() {
        local board=$(board_name)
        local magic="$(get_magic_long "$1")"
@@ -240,6 +254,24 @@ platform_check_image() {
                        echo "Invalid image type."
                        return 1
                }
+
+               local hwid=$(tplink_get_v2_hwid)
+               local mid=$(tplink_get_v2_mid)
+               local imagehwid=$(tplink_get_image_v2_hwid "$1")
+               local imagemid=$(tplink_get_image_v2_mid "$1")
+
+               [ "$hwid" != "$imagehwid" -o "$mid" != "$imagemid" ] && {
+                       echo "Invalid image, hardware ID mismatch, hw:$hwid 
$mid image:$imagehwid $imagemid."
+                       return 1
+               }
+
+               local boot_size=$(tplink_get_image_v2_boot_size "$1")
+
+               [ "$boot_size" != "00000000" ] && {
+                       echo "Invalid image, it contains a bootloader."
+                       return 1
+               }
+
                return 0
                ;;
        cy-swr1100|\
-- 
2.13.0


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to