Some newer OEM firmware files, even for existing devices, have the fwup-ptn at offset 0x1050 instead of 0x1014. If the fwup-ptn header is not found at 0x1014, the alternative offset at 0x1050 is tried.
Signed-off-by: Andreas Böhler <[email protected]> --- src/tplink-safeloader.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/tplink-safeloader.c b/src/tplink-safeloader.c index ddb5dff..5bf62f3 100644 --- a/src/tplink-safeloader.c +++ b/src/tplink-safeloader.c @@ -3987,6 +3987,7 @@ static void convert_firmware(const char *input, const char *output) struct flash_partition_entry *flash_os_image = NULL, *flash_file_system = NULL; struct flash_partition_entry *fwup_partition_table = NULL; size_t firmware_offset = 0x1014; + size_t firmware_offset_alt = 0x1050; FILE *input_file, *output_file; struct stat statbuf; @@ -4005,7 +4006,12 @@ static void convert_firmware(const char *input, const char *output) error(1, 0, "Can not open output firmware %s", output); if (read_partition_table(input_file, firmware_offset, fwup, MAX_PARTITIONS, 0) != 0) { - error(1, 0, "Error can not read the partition table (fwup-ptn)"); + fprintf(stderr, "DEBUG: can not find partition table at 0x%lx, trying alternative location at 0x%lx\n", + firmware_offset, firmware_offset_alt); + firmware_offset = firmware_offset_alt; + if (read_partition_table(input_file, firmware_offset, fwup, MAX_PARTITIONS, 0) != 0) { + error(1, 0, "Error can not read the partition table (fwup-ptn)"); + } } fwup_os_image = find_partition(fwup, MAX_PARTITIONS, -- 2.38.1 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
