[source] kernel: mtdsplit_uimage: fix Edimax parser

LEDE Commits lede-commits at lists.infradead.org
Sat Oct 15 02:06:40 PDT 2016


mkresin pushed a commit to source.git, branch master:
https://git.lede-project.org/634d690d740ad2e586701a393d60cc9753808193

commit 634d690d740ad2e586701a393d60cc9753808193
Author: Mathias Kresin <dev at kresin.me>
AuthorDate: Thu Sep 29 19:28:13 2016 +0200

    kernel: mtdsplit_uimage: fix Edimax parser
    
    According to the author the code was added to in preparation for adding
    support for a new board. The patch for the board was never send and the
    code never really tested.
    
    The edimax header starting with the edimax magic is put in front of the
    uImage header. There is no special uImage header used. Means, default
    magic and the type field is set to kernel as usual.
    
    Signed-off-by: Mathias Kresin <dev at kresin.me>
    
    edimax parser fix
---
 .../files/drivers/mtd/mtdsplit/mtdsplit_uimage.c     | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c
index 3ddb71b..26cb66a 100644
--- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c
+++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c
@@ -310,27 +310,21 @@ static struct mtd_part_parser uimage_netgear_parser = {
 
 static ssize_t uimage_find_edimax(u_char *buf, size_t len)
 {
-	struct uimage_header *header;
+	u32 *magic;
 
-	if (len < FW_EDIMAX_OFFSET + sizeof(*header)) {
+	if (len < FW_EDIMAX_OFFSET + sizeof(struct uimage_header)) {
 		pr_err("Buffer too small for checking Edimax header\n");
 		return -ENOSPC;
 	}
 
-	header = (struct uimage_header *)(buf + FW_EDIMAX_OFFSET);
-
-	switch be32_to_cpu(header->ih_magic) {
-	case FW_MAGIC_EDIMAX:
-		break;
-	default:
+	magic = (u32 *)buf;
+	if (be32_to_cpu(*magic) != FW_MAGIC_EDIMAX)
 		return -EINVAL;
-	}
 
-	if (header->ih_os != IH_OS_LINUX ||
-	    header->ih_type != IH_TYPE_FILESYSTEM)
-		return -EINVAL;
+	if (!uimage_verify_default(buf + FW_EDIMAX_OFFSET, len))
+		return FW_EDIMAX_OFFSET;
 
-	return FW_EDIMAX_OFFSET;
+	return -EINVAL;
 }
 
 static int



More information about the lede-commits mailing list