summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorAndrew Goodbody <[email protected]>2025-12-05 17:28:36 +0000
committerJerome Forissier <[email protected]>2025-12-18 16:27:15 +0100
commit8910efa71b8bab88b0ca81b681b5842fd25b1000 (patch)
treefb7ec02b204b3025cc639f78c0a5b1815ebbb515 /net
parent47b50fb1125c539d80ed3e7f739c02c6486e1b52 (diff)
net: lwip: tftp: Fix filename handling
The code to choose the filename to use does not cope with no name set at all. Firstly the test for a name in net_boot_file_name tests the pointer rather than the string it points to. Secondly the cleanup on exit in this case attempts to free a global variable. Fix both issues. Signed-off-by: Andrew Goodbody <[email protected]> Reviewed-by: Jerome Forissier <[email protected]>
Diffstat (limited to 'net')
-rw-r--r--net/lwip/tftp.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/lwip/tftp.c b/net/lwip/tftp.c
index 94bacf63075..6c7ffba661e 100644
--- a/net/lwip/tftp.c
+++ b/net/lwip/tftp.c
@@ -279,7 +279,7 @@ int do_tftpb(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
if (!arg)
arg = net_boot_file_name;
- if (arg) {
+ if (*arg) {
/* Parse [ip:[port:]]fname */
i = 0;
while ((*(words + i) = strsep(&arg, ":")))
@@ -342,6 +342,7 @@ int do_tftpb(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
if (tftp_loop(eth_get_dev(), laddr, fname, srvip, port) < 0)
ret = CMD_RET_FAILURE;
out:
- free(arg);
+ if (arg != net_boot_file_name)
+ free(arg);
return ret;
}