From bc21e5bca265304dc66f62f63f0c7a054875deb5 Mon Sep 17 00:00:00 2001
From: juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 26 Oct 2012 18:58:13 +0000
Subject: ar71xx: reject TP-Link images containing a bootloader

The original TP-Link firmware images can be flashed via
the sysupgrade command, however those may contain a
bootloader. Flashing such an image via sysupgrade
bricks the board, and it can't be recovered without
a serial console.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33944 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 target/linux/ar71xx/base-files/lib/upgrade/platform.sh | 12 ++++++++++++
 1 file changed, 12 insertions(+)

(limited to 'target/linux')

diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index 066bfd414..f1d95f6f6 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -65,6 +65,10 @@ tplink_get_image_hwid() {
 	get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
 }
 
+tplink_get_image_boot_size() {
+	get_image "$@" | dd bs=4 count=1 skip=37 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")"
@@ -174,6 +178,14 @@ platform_check_image() {
 			return 1
 		}
 
+		local boot_size
+
+		boot_size=$(tplink_get_image_boot_size "$1")
+		[ "$boot_size" != "00000000" ] && {
+			echo "Invalid image, it contains a bootloader."
+			return 1
+		}
+
 		return 0
 		;;
 	wndr3700)
-- 
cgit v1.2.3