firmware-utils/tplink-safeloader: soft-version magic is data length
authorSander Vanheule <sander@svanheule.net>
Sat, 11 Jul 2020 20:58:07 +0000 (22:58 +0200)
committerStijn Tintel <stijn@linux-ipv6.be>
Wed, 9 Sep 2020 17:41:50 +0000 (20:41 +0300)
The soft-version partition actually contains a header and trailing data:
* header: {data length, [zero]}
* data: {version, bcd encoded date, revision}

The data length is currently treated as a magic number, but should
contain the length of the partition data.

This header is also present the following partitions (non-exhaustive):
* string-based soft-version
* support-list

Signed-off-by: Sander Vanheule <sander@svanheule.net>
tools/firmware-utils/src/tplink-safeloader.c

index 501b396343c17c4576bf30b57fe9e00b7be11e1d..145e80855ad604b7d9dd2fc47432721d5f13c0a5 100644 (file)
@@ -84,7 +84,7 @@ struct device_info {
 
 /** The content of the soft-version structure */
 struct __attribute__((__packed__)) soft_version {
-       uint32_t magic;
+       uint32_t data_len;
        uint32_t zero;
        uint8_t pad1;
        uint8_t version_major;
@@ -2153,7 +2153,8 @@ static struct image_partition_entry make_soft_version(uint32_t rev) {
 
        struct tm *tm = gmtime(&t);
 
-       s->magic = htonl(0x0000000c);
+       /* Partition contents size, minus 8 byte header and trailing byte */
+       s->data_len = htonl(entry.size-9);
        s->zero = 0;
        s->pad1 = 0xff;