openwrt/tools
Sander Vanheule 14464e1128 firmware-utils/tplink-safeloader: add compat level
TP-Link has introduced a compatibility level to prevent certain
downgrades. This information is stored in the soft-version partition,
changing the data length from 0xc to 0x10.

The compatibility level doesn't change frequently. For example, it has
the following values for the EAP245v3 (released 2018-Q4):
* FW v2.2.0  (2019-05-30): compat_level=0
* FW v2.3.0  (2019-07-31): compat_level=0
* FW v2.3.1  (2019-10-29): compat_level=1
* FW v2.20.0 (2020-04-23): compat_level=1

Empty flash values (0xffffffff) are interpreted as compat_level=0.
If a firmware upgrade file has a soft-version block without
compatibility level (data length < 0x10), this is also interpreted as
compat_level=0.

By including a high enough compatibility level in factory images, stock
firmware can be convinced to accept the image. A compatibility level
aware firmware will keep the original value.

Example upgrade log of TP-Link EAP245v3 FWv2.3.0 to FWv2.20.0:
    [NM_Debug](nm_fwup_verifyFwupFile) 02073: curSoftVer:2.3.0 Build
        20190731 Rel. 51932,newSoftVer:2.20.0 Build 20200423 Rel. 36779
    ...
    AddiHardwareVer check: NEW(0x1) >= CUR(0x0), Success.
    ...
    [NM_NOTICE](updateDataToNvram) 00575: Restore old additionalHardVer:
    0x0.(new 0x1)
    [NM_NOTICE](updateDataToNvram) 00607: PTN 07: name = soft-version,
        base = 0x00092000, size = 0x00000100 Bytes, upDataType = 1,
        upDataStart = 7690604b, upDataLen = 00000018
    [NM_Debug](updateDataToNvram) 00738: PTN 07: write bytes = 000002eb

Other firmware upgrades have been observed to modify the compabitility
stored level (e.g. TP-Link EAP225-Outdoor FWv1.4.1 to FWv1.7.0).
Therefore, it seems to be the safest option to set the OpenWrt
compatibility level to the highest known value instead of the highest
possible value (0xfffffffe), to ensure users do not get unexpectedly
refused firmware upgrades when using a device reverted back to stock.

To remain compatible with existing devices and not produce different
images, the image builder doesn't store a compatibility level if it is
zero.

Signed-off-by: Sander Vanheule <sander@svanheule.net>
2020-09-09 20:41:50 +03:00
..
autoconf
autoconf-archive
automake
b43-tools
bc
bison tools/bison: update to 3.7.1 2020-08-23 11:29:24 +02:00
cbootimage
cbootimage-configs
ccache tools/ccache: update to 3.7.11 2020-08-23 19:40:51 +02:00
cmake tools/cmake: update to 3.18.2 2020-08-23 19:40:42 +02:00
coreutils tools/coreutils: update to 8.32 2020-08-30 22:21:34 +02:00
dosfstools
e2fsprogs
elftosb
expat
fakeroot tools: fakeroot: use TCP as IPC transport 2020-09-09 13:33:50 +02:00
findutils
firmware-utils firmware-utils/tplink-safeloader: add compat level 2020-09-09 20:41:50 +03:00
flex
flock
genext2fs
gengetopt
gmp
include
isl
kernel2minor
libelf
libressl
libtool
lzma treewide: https for downloads.openwrt.org sources 2020-08-31 11:26:10 +01:00
lzma-old treewide: https for downloads.openwrt.org sources 2020-08-31 11:26:10 +01:00
m4
make-ext4fs
missing-macros
mkimage tools/mkimage: create .itb file with read-access for group,other not just owner. 2020-07-23 14:25:10 -04:00
mklibs
mm-macros
mpc tools/mpc: update to 1.2.0 2020-08-27 21:18:16 +02:00
mpfr tools/mpfr: update to 4.1.0 2020-08-23 19:40:32 +02:00
mtd-utils tools: mtd-utils: Update to version 2.1.2 2020-08-26 23:29:35 +02:00
mtools
padjffs2
patch
patch-image rb532: drop target 2020-09-02 16:29:22 +02:00
patchelf
pkgconf
qemu
quilt
sdimage
sed
sparse
squashfs
squashfskit4 tools/squashfskit4: fix build on non-linux systems 2020-09-01 17:01:56 +02:00
sstrip
tar
xz
zip
zlib
zstd
Makefile tools: sort alphabetically 2020-09-02 16:29:22 +02:00