From: Timo tp Preißl Date: Fri, 9 Jan 2026 11:24:45 +0000 (+0000) Subject: fs: prevent integer overflow in fs.c do_mv X-Git-Tag: v2026.04-rc1~32^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99416665f006b925db12f6c02b11f9da02c10c5a;p=thirdparty%2Fu-boot.git fs: prevent integer overflow in fs.c do_mv An integer overflow in size calculations could lead to under-allocation and potential heap buffer overflow. Signed-off-by: Timo tp Preißl Reviewed-by: Simon Glass Reviewed-by: Tom Rini --- diff --git a/fs/fs.c b/fs/fs.c index c7706d9af85..319c55c440a 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -1059,15 +1059,25 @@ int do_mv(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[], */ if (dirs) { char *src_name = strrchr(src, '/'); - int dst_len; if (src_name) src_name += 1; else src_name = src; - dst_len = strlen(dst); - new_dst = calloc(1, dst_len + strlen(src_name) + 2); + size_t dst_len = strlen(dst); + size_t src_len = strlen(src_name); + size_t total; + + if (__builtin_add_overflow(dst_len, src_len, &total) || + __builtin_add_overflow(total, 2, &total)) { + return 0; + } + + new_dst = calloc(1, total); + if (!new_dst) + return 0; + strcpy(new_dst, dst); /* If there is already a trailing slash, don't add another */