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

Use symbolic return value for the command while updating
the return value handling.

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

index 2d25542882291d3315b65204a1aa174ddd0a14e9..4bd1179390b7b62a0ee0440ab602ce777726bf1d 100644 (file)
--- a/cmd/zip.c
+++ b/cmd/zip.c
@@ -7,12 +7,15 @@
 #include <command.h>
 #include <env.h>
 #include <gzip.h>
+#include <mapmem.h>
 #include <vsprintf.h>
 
 static int do_zip(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
        unsigned long src, dst;
        unsigned long src_len, dst_len = ~0UL;
+       void *srcp, *dstp;
+       int ret;
 
        switch (argc) {
                case 5:
@@ -27,13 +30,21 @@ static int do_zip(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
                        return cmd_usage(cmdtp);
        }
 
-       if (gzip((void *) dst, &dst_len, (void *) src, src_len) != 0)
-               return 1;
+       srcp = map_sysmem(src, src_len);
+       dstp = map_sysmem(dst, dst_len);
+
+       ret = gzip(dstp, &dst_len, srcp, src_len);
+
+       unmap_sysmem(dstp);
+       unmap_sysmem(srcp);
+
+       if (ret)
+               return CMD_RET_FAILURE;
 
        printf("Compressed size: %lu = 0x%lX\n", dst_len, dst_len);
        env_set_hex("filesize", dst_len);
 
-       return 0;
+       return CMD_RET_SUCCESS;
 }
 
 U_BOOT_CMD(