aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_tplink.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_tplink.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_tplink.c
index 3a50250715..c346aa8130 100644
--- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_tplink.c
+++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_tplink.c
@@ -106,6 +106,7 @@ static int mtdsplit_parse_tplink(struct mtd_info *master,
return -EINVAL;
kernel_size = sizeof(hdr) + be32_to_cpu(hdr.v1.kernel_len);
+ rootfs_offset = be32_to_cpu(hdr.v1.rootfs_ofs);
break;
case 2:
case 3:
@@ -113,6 +114,7 @@ static int mtdsplit_parse_tplink(struct mtd_info *master,
return -EINVAL;
kernel_size = sizeof(hdr) + be32_to_cpu(hdr.v2.kernel_len);
+ rootfs_offset = be32_to_cpu(hdr.v2.rootfs_ofs);
break;
default:
return -EINVAL;
@@ -121,11 +123,9 @@ static int mtdsplit_parse_tplink(struct mtd_info *master,
if (kernel_size > master->size)
return -EINVAL;
- /* Find the rootfs after the kernel. */
- err = mtd_check_rootfs_magic(master, kernel_size, NULL);
- if (!err) {
- rootfs_offset = kernel_size;
- } else {
+ /* Find the rootfs */
+ err = mtd_check_rootfs_magic(master, rootfs_offset, NULL);
+ if (err) {
/*
* The size in the header might cover the rootfs as well.
* Start the search from an arbitrary offset.
@@ -142,7 +142,7 @@ static int mtdsplit_parse_tplink(struct mtd_info *master,
parts[0].name = KERNEL_PART_NAME;
parts[0].offset = 0;
- parts[0].size = rootfs_offset;
+ parts[0].size = kernel_size;
parts[1].name = ROOTFS_PART_NAME;
parts[1].offset = rootfs_offset;