summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorMarek Vasut <[email protected]>2026-01-28 20:41:30 +0100
committerTom Rini <[email protected]>2026-02-06 09:29:53 -0600
commit3a76ba66ecb65b892de8b16360a8b0e93415f712 (patch)
tree66500bcb5b7074d6625cf3884aa884e367397e46 /cmd
parentf2c704c0e8aac1b846fd55b7178151b2c879e185 (diff)
cmd: zip: Use map_sysmem() with buffers in the zip command
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 <[email protected]>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/zip.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/cmd/zip.c b/cmd/zip.c
index 2d255428822..4bd1179390b 100644
--- 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(