From: Gabor Juhos <juhosg@openwrt.org>
Date: Mon, 5 Dec 2011 18:11:51 +0000 (+0000)
Subject: ar71xx: verify hardware id of firmware images on TP-Link boards
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=c6bcf8d1d844cb5375b4115d63e83c537908a6c1;p=openwrt%2Fstaging%2Flinusw.git

ar71xx: verify hardware id of firmware images on TP-Link boards

SVN-Revision: 29455
---

diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index bb6ceb7066..ca0799d1bf 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -48,6 +48,16 @@ wndr3700_board_detect() {
 	AR71XX_MODEL="$machine"
 }
 
+tplink_get_hwid() {
+	local part
+	local hwid
+
+	part=$(find_mtd_part firmware)
+	[ -z "$part" ] && return 1
+
+	dd if=$part bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
 ar71xx_board_detect() {
 	local machine
 	local name
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index 8b69bc59a6..d2780a50a1 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -61,6 +61,10 @@ platform_do_upgrade_combined() {
 	fi
 }
 
+tplink_get_image_hwid() {
+	get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
 platform_check_image() {
 	local board=$(ar71xx_board_name)
 	local magic="$(get_magic_word "$1")"
@@ -125,6 +129,18 @@ platform_check_image() {
 			echo "Invalid image type."
 			return 1
 		}
+
+		local hwid
+		local imageid
+
+		hwid=$(tplink_get_hwid)
+		imageid=$(tplink_get_image_hwid "$1")
+
+		[ "$hwid" != "$imageid" ] && {
+			echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid."
+			return 1
+		}
+
 		return 0
 		;;
 	wndr3700)