]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
cmd: unzip: Use map_sysmem() with buffers in the gzwrite command
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Wed, 28 Jan 2026 19:41:04 +0000 (20:41 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 6 Feb 2026 15:29:50 +0000 (09:29 -0600)
The current implementation casts an address to a pointer. Make it more
sandbox-friendly by using map_sysmem().

Convert 'addr' variable to unsigned long, as that is the return type of
hextoul() and address parameter type of map_sysmem().

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
cmd/unzip.c

index da958f1280393f52d5758f95a1eecdb70d0b261b..ba83995040bbb6022e8497019b223b76cf58102f 100644 (file)
@@ -50,11 +50,12 @@ static int do_gzwrite(struct cmd_tbl *cmdtp, int flag,
 {
        struct blk_desc *bdev;
        int ret;
-       unsigned char *addr;
+       unsigned long addr;
        unsigned long length;
        unsigned long writebuf = 1<<20;
        off_t startoffs = 0;
        size_t szexpected = 0;
+       void *addrp;
 
        if (argc < 5)
                return CMD_RET_USAGE;
@@ -62,7 +63,7 @@ static int do_gzwrite(struct cmd_tbl *cmdtp, int flag,
        if (ret < 0)
                return CMD_RET_FAILURE;
 
-       addr = (unsigned char *)hextoul(argv[3], NULL);
+       addr = hextoul(argv[3], NULL);
        length = hextoul(argv[4], NULL);
 
        if (5 < argc) {
@@ -75,7 +76,11 @@ static int do_gzwrite(struct cmd_tbl *cmdtp, int flag,
                }
        }
 
-       ret = gzwrite(addr, length, bdev, writebuf, startoffs, szexpected);
+       addrp = map_sysmem(addr, length);
+
+       ret = gzwrite(addrp, length, bdev, writebuf, startoffs, szexpected);
+
+       unmap_sysmem(addrp);
 
        return ret ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
 }